Сброс переопределенных SystemColors
Я меняю SystemColors.HighlightBrushKey
а также SystemColors.ControlBrushKey
в моем ListView, и это работает хорошо; но это представление списка содержит другие сложные элементы управления в каждом из его 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 будет работать правильно.
Есть ли другой способ решить эту проблему?
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
и использовать там, где это необходимо.