2017-01-22 37 views
0

我有一个TreeView控件,显示不同的对象对象。我使用多个DataTemplates,每个类型一个,其DataType相应地设置。
代码:在具有多个DataTemplates的树视图中,如何将样式应用于其中的一个样式

<TreeView> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Family}" ItemsSource = "Members"> 
      <!-- template omitted here--> 
     </HierarchicalDataTemplate> 
     <DataTemplate DataType = "{x:Type local:FamilyMember}"> 
      <!--template omitted--> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 

现在我想将样式应用到HierarchicalDataTemplate,只给它。我必须使用一种风格,因为我设置了TreeViewItem的一些属性,在这种情况下是项目容器。 我想:

<HierarchicalDataTemplate DataType="{x:Type local:Family}" ItemsSource = "Members"> 
    <HierarchicalDataTemplate.ItemsContainerStyle> 
     <Style TargetType = "TreeViewItem"> 
      <!-- some styling of the tree view item--> 
     </Style> 
    <\HierarchicalDataTemplate.ItemsContainerStyle> 
    <!-- template omitted here--> 
</HierarchicalDataTemplate> 

但风格被应用到所有树项目,即使是那些呈现FamilyMember对象,它们是同一个模板的不是。
我该怎么做?

回答

1

您可以使用ItemContainerStyleSelector属性来控制哪些样式适用于哪些项目。我在this answer中发现了一个示例用法,可以帮助您入门。与该示例的主要区别在于,您将根据对象的类型而不是对象的属性来选择。

+0

感谢您的回答,但有没有办法在普通的XAML中实现? – RoadBump

+0

我能想到的只有XAML。然而,如果你花了一些时间,你可以开发一个足够通用的样式选择器类映射类型。然后,您可以在任何地方重复使用,并仅在XAML中完成工作。我从来没有尝试过。 – Xavier

+0

我试过了,它解决了这个问题。但是现在出于一个奇怪的原因,我在输出窗口中遇到了很多绑定错误,并说'FamilyMember'没有名称为'Members'的成员。似乎它试图将'HierarchicalDataTemplate'应用于家庭成员,即使'DataType'设置为'Family'。现在做什么? – RoadBump

相关问题