重置被覆盖的SystemColors

时间:2014-01-27 13:16:43

标签: .net wpf listview systemcolors

我正在更改ListView中的SystemColors.HighlightBrushKeySystemColors.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将正常工作。

还有其他方法可以解决这个问题吗?

1 个答案:

答案 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下,并在需要的地方使用。