我有一个TreeView
,它在层次结构中呈现了几种不同的数据类型。我在HierarchicalDataTemplate
中定义了多个UserControl.Resources
,我根据其数据类型使用它来改变每个节点的外观:
<UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}" ItemsSource="{Binding Children}">
....
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:MySecondType}" ItemsSource="{Binding Children}">
....
</HierarchicalDataTemplate>
.... etc ....
</UserControl.Resources>
我希望每种类型的节点都有不同的悬停和选定的颜色。但是,我在更改这些颜色(for example, this question)时发现的所有示例都涉及更改一些系统定义的资源,例如HighlightBrushKey
。由于我无法访问TreeViewItem
生成的TreeView
,因此如何在每个项目的基础上覆盖这些资源值?
答案 0 :(得分:1)
我通过设置您提到的SystemColors
来制作SelectedItem Background Transparent
,然后在Border
元素中声明我的项目,以便我可以单独设置Background
颜色来实现这一目标使用DataTrigger
和RelativeSource Binding
:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
...
<HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}"
ItemsSource="{Binding Children}">
<Border>
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="Background" Value="AliceBlue" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={
RelativeSource AncestorType={x:Type TreeViewItem}}}"
Value="True">
<Setter Property="Background" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<!-- Your content here -->
</HierarchicalDataTemplate>