我正在更改ListView中的SystemColors.HighlightBrushKey
和SystemColors.ControlBrushKey
,效果很好;但是这个列表视图包含其每个ListViewItem中的其他复杂控件(例如其他ListView,DataGrid),并且这个新的系统颜色将应用于所有子控件。
<!-- This resource is added to remove the blue highlighting
in the selected ListView item. -->
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent" />
<!-- This resource is added to remove the background highlighting
of the inactive selected ListView item. -->
<SolidColorBrush
x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="Transparent" />
有没有办法将此系统颜色重置为原始的颜色,以便控件是此ListView的子控件?
我面临的实际问题是这些被覆盖的系统颜色会被应用到子控件(ListView)的上下文菜单中;这样工作正常但是当使用Windows经典主题时,ContextMenus使用这些系统颜色并且看起来很奇怪。所以我希望如果我可以将SystemColors重置为原始的,那么ContextMenu将正常工作。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
您应 覆盖ListViewItem的默认模板 ,而不是覆盖SystemColors。
覆盖模板, 从中删除选择触发器和mouseOver ,如下所示:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
Name="Bd"
SnapsToDevicePixels="True">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}"
ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}"
HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="UIElement.IsEnabled" Value="False">
<Setter Property="TextElement.Foreground" TargetName="Bd">
<Setter.Value>
<DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
如果要在多个ListView上应用,请将此资源放在App.Resources
下,并在需要的地方使用。