列表/组合框背景和选定的颜色.net 4.5

Oli*_*Oli 13 .net wpf windows-8

我有一个应用程序在Windows 7及以下目标.net 4框架上运行愉快.
如果应用程序现在安装在Windows 8(运行.net 4.5但仍然以.net 4为目标)中,则会显示列表框或组合框中所选项目的蓝色背景以及焦点项目的白色背景.反正有没有删除它?
我在我的XAML中使用以下内容来设置有问题的样式,它似乎在Windows 8之前解决了这个问题.

<ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                    </Style.Resources>
                </Style>
            </ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

Oli*_*Oli 10

我忘记回来了解我是如何解决这个问题的....原来你需要做的就是创建一个空白的Item Container Style并将它分配给你的listbox/combobox等....你可以使用它以及保持你可能正在使用的当前样式,如ListBox Style ="{StaticResource CurrentStyle}"ItemContainerStyle ="{StaticResource BlankListBoxContainerStyle}"/>其中BlankListBoxContainerStyle会像.....

<Style x:Key="BlankListBoxContainerStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FocusVisualStyle"
            Value="{x:Null}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)


Ana*_*and 6

您的应用程序将覆盖SystemColors.HighlightBrushKey(和其他系统键)的值.这适用于通过引用系统颜色来定义其前景/背景颜色的控件,就像它们在Win7默认主题(Aero)中一样.
但Win8默认主题(Aero2)以不同方式定义颜色.所以你的覆盖没有效果.

主题不需要使用系统颜色.他们碰巧在Win7/Aero中这样做,但仅仅是因为系统颜色被认为是足够的.

希望这可以帮助.

  • 谢谢,这是有道理的.你知道我如何阻止Aero2在我的应用程序中着色吗? (2认同)