我有一个TreeView,其突出显示禁用如下:
<TreeView Name="tvFilters" Margin="0,10,0,10" Background="White" BorderBrush="White">
<TreeView.Resources>
<!-- Disables the blue highlighting when a TreeViewItem is clicked -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">
Transparent
</SolidColorBrush>
</TreeView.Resources>
</TreeView>
编辑:这是我的TreeView的一部分 - 注意点击TreeViewItem后开发的灰色区域:
这是另一个:
答案 0 :(得分:4)
要获得所需的行为,您需要为TreeViewItem
提供新的默认样式和模板。在此模板中,您可以更改突出显示项目的背景颜色,而不会影响TreeViewItem
的所有子项的背景。
您可以在MSDN中找到包含模板的样式示例:TreeViewItem ControlTemplate Example。
您需要为TreeView
提供可用的样式和模板。因此,从网站复制XAML并将其粘贴到TreeView
:
<TreeView x:Name="tvFilters" ...>
<TreeView.Resources>
<!-- paste copied styles here -->
</TreeView.Resources>
</TreeView>
注意:确保您还复制了所提供示例底部的SolidColorBrush
名为GlyphBrush
的内容。否则你的代码将无效。
要使代码按您的意愿工作,您需要进行一些修改。
从以下行中删除x:Key="{x:Type TreeViewItem}"
<Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
所以它看起来像
<Style TargetType="{x:Type TreeViewItem}">
这会将样式应用于TreeView
在TreeViewItem
的样式中找到<Trigger Property="IsSelected" Value="true">
并替换
<Setter TargetName="Bd"
Property="Background"
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
与
<Setter TargetName="Bd"
Property="Background"
Value="Transparent" />
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
注意:正在替换这两个值(Foreground
和Background
)!
在TreeViewItem
的样式中找到<MultiTrigger>
的{{1}}并替换
<Condition Property="IsSelected" Value="true"/>
与
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
在进行修改之前,<Setter TargetName="Bd" Property="Background" Value="Transparent"/>
将如下所示:
进行修改后,TreeView
上的蓝色突出显示将在TreeView
上仍然可用时消失: