2010-10-18 50 views
5

我有两个DataTemplates用于Treelistview控件中的不同单元。 模板与90%相似。 如何重复使用相同的Xaml?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> 

回答

6

你可以尝试做这样的事情:

<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

好主意,但它迫使我增加不必要的边界魔女我更喜欢从避免。 – Erez 2010-10-19 11:35:46

+0

边框不是必需的... – mdm20 2010-10-19 13:43:11