我尝试使用TreeView显示分层数据,并希望为不同的子类型设置不同的DataTemplates。
但问题是,我的风格没有得到应用。
也许这是一个非常简单的错误,但我真的找不到。
<TreeView ItemsSource="{Binding List}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Main}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Property1}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Type2}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<TextBlock Text="{Binding Property2}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Type3}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="False"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>发布于 2015-08-24 10:10:43
好吧,我知道出了什么问题。HierarchicalDataTemplate.ItemContainerStyle包含应用于ItemsContainer的样式,其中存储当前节点的子节点。将此作为一个实验,将您的风格更改为:
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
<Setter Property="Foreground" Value="Navy" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>您会注意到,您放置此样式的节点仍然有一个黑色的前景,但是所有的子类现在都有一个海军的前景。
这有点违背直觉,但当你想到它的时候,我想这是有道理的。因此,考虑到这一点,我认为最好的解决方案是将所有IsExpanded的TreeViewItems绑定到VM中的一个变量,然后根据那里的类型选择不同的值。
发布于 2015-08-24 09:12:47
我也有过类似的问题。如果Type2和Type3是接口,XAML中的选择将无法工作,我不得不使用类。如果要使用接口,可以实现模板选择器。
https://stackoverflow.com/questions/32177752
复制相似问题