Сброс переопределенных 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 и использовать там, где это необходимо.

Другие вопросы по тегам