针对不同类型的TreeViewItem的不同IsExpanded绑定

时间:2015-11-13 08:58:29

标签: wpf treeview

我想对IsExpanded的{​​{1}}使用以下绑定:

TreeViewItem

但我需要不同 <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="{Binding IsExpanded}" /> </Style> </TreeView.ItemContainerStyle> 的不同绑定属性 在我的顶级情况下,我需要HierarchicalDataTemplate,其他级别只需要{Binding PropertyX.IsExpanded} 这可能吗?

1 个答案:

答案 0 :(得分:0)

我刚刚找到答案。对于顶级,请使用TreeView.ItemContainerStyle

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
         <Setter Property="IsExpanded" Value="{Binding PropertyX.IsExpanded}" />
     </Style>
</TreeView.ItemContainerStyle>

对于子级别,请使用HierarchicalDataTemplate.ItemContainerStyle

<HierarchicalDataTemplate.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
         <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
     </Style>
</HierarchicalDataTemplate.ItemContainerStyle>

要理解这一点,MSDN documentation说: 获取或设置应用于每个子项的项容器的样式。这意味着当您为显示为树视图顶层的对象类型设置HierarchicalDataTemplate.ItemContainerStyle时,它将应用于其子项。当您在Treeview级别设置它时,它将应用于顶级对象类型。

最低级别的对象类型无法扩展,因此不需要HierarchicalDataTemplate.ItemContainerStyle

但是,第二个最后一级的对象类型从它上面的级别继承Style。因为它应用于它的 children ,即最低级别,它期望IsExpanded属性出现在最低级别...这会导致数据绑定错误。在第二个最后一级设置<Setter Property="IsExpanded" Value="False"/>可解决此问题(第二个最后一个级别可以扩展,但其子级不能)。空格样式<Style TargetType="{x:Type TreeViewItem}" />也解决了这个问题。