我有一个 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 后出现的灰色区域:
这是另一个:
最佳答案
要获得所需的行为,您需要为 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>
有一个<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
上的蓝色高亮显示在 ComboBox
上仍然可用时将消失:
关于c# - 如何在不影响其子项的情况下将属性应用于控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739460/