2010-10-18 16 views
5

Tengo dos plantillas de datos para diferentes celdas en mi control Treelistview. las plantillas son 90% similares. ¿Cómo puedo reutilizar el Xaml idéntico?Reutilización de DataTemplate

<DataTemplate x:Key="@names"> 
      <TextBlock Name="txt" Text="{Binding Names}" Style="{DynamicResource @BasicTextBlockStyle}" 
        Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsVisible}" Value="True"> 
        <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsScoped}" Value="True"> 
        <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 

     <DataTemplate x:Key="@Ages"> 
      <TextBlock Name="txt" Text="{Binding Age}" Style="{DynamicResource @BasicTextBlockStyle}" 
        Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsVisible}" Value="True"> 
        <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsScoped}" Value="True"> 
        <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 

Respuesta

6

Usted puede intentar hacer algo como esto:

<DataTemplate x:Key="Inner"> 
    <TextBlock Name="txt" Text="{Binding}" Style="{DynamicResource @BasicTextBlockStyle}" 
      Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding IsVisible}" Value="True"> 
      <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsScoped}" Value="True"> 
      <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

<DataTemplate x:Key="Names"> 
    <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Left"> 
     <ContentPresenter Content="{Binding Names}" ContentTemplate="{StaticResource Inner}" /> 
    </Border> 
</DataTemplate> 

<DataTemplate x:Key="Ages"> 
    <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Right"> 
     <ContentPresenter Content="{Binding Ages}" ContentTemplate="{StaticResource Inner}" /> 
    </Border> 
</DataTemplate> 
+0

buena idea pero que me está obligando a añadir bruja frontera innecesaria prefiero evitar a. – Erez

+0

El borde no es obligatorio ... – mdm20