我有一个TreeView
,它将在任意层次结构中显示几种不同的数据类型。为此,我要为将在HierarchicalDataTemplate
中显示的每种数据类型定义具体的TreeView
:
<HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}" ItemsSource="{Binding Children}" >
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsObjectExpanded, Mode=TwoWay}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:MySecondType}" ItemsSource="{Binding Children}" >
...
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:MyThirdType}" ItemsSource="{Binding Children}" >
...
</HierarchicalDataTemplate>
每个HierarchicalDataTemplate
的风格略有不同(上面没有显示),这就是我为每种类型定义不同HierarchicalDataTemplate
的原因。
然而,IsExpanded
绑定并不像我期望的那样工作。无论源对象的TreeView
属性的值如何,IsObjectExpanded
的根节点都不会展开。子节点绑定正在按预期工作。
此外,如果我在根节点的IsExpanded
定义中将True
属性硬编码为HierarchicalDataTemplate
(假设我知道哪个类型将位于树的根部),它的 children 显示扩展而不是根节点本身。
我是否正确使用IsExpanded
属性?或者是否有另一种方法我应该设置IsExpanded
属性以包含根节点?
答案 0 :(得分:4)
HierarchicalDataTemplate.ItemContainerStyle
为您声明模板的项目的子项设置样式。如果您需要为root设置样式,可以使用TreeView.ItemContainerStyle
。
如果您觉得受到这种架构的限制(这无疑是愚蠢的),您可以使用HierarchicalDataTemplate.ItemContainerStyleSelector
。