我想对IsExpanded
的{{1}}使用以下绑定:
TreeViewItem
但我需要不同 <TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
</Style>
</TreeView.ItemContainerStyle>
的不同绑定属性
在我的顶级情况下,我需要HierarchicalDataTemplate
,其他级别只需要{Binding PropertyX.IsExpanded}
这可能吗?
答案 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}" />
也解决了这个问题。