在具有多个DataTemplates的树视图中,如何将样式仅应用于其中一个

时间:2017-01-22 13:34:35

标签: wpf treeview datatemplate

我有一个TreeView控件,显示不同的对象类型。我使用多个DataTemplates,每个类型一个,相应地设置DataType 代码:

<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的一些属性,在这种情况下是items容器。 我试过了:

<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 个答案:

答案 0 :(得分:1)

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