如何更改ComboBox下拉背景?

时间:2017-11-04 00:03:02

标签: xaml colors combobox uwp

我想在UWP项目中修改ComboBox。我想更改包含StackPanel的{​​{1}}(?)的背景颜色,但我还没有找到一种简单的方法。

在这里,我想改变浅灰色填充的颜色。

Combobox open

ComboBoxItems周围的颜色应匹配,但它是突出的默认灰色。

以下是MSN Money的ComboBoxItems具有与ComboBox匹配的自定义填充颜色的示例。这就是我希望实现的目标。

MSN Money Combobox

我使用“填充”一词,但它实际上只是包含ComboBoxItems的元素的颜色。

据我了解,我必须修改Windows 10 SDK中提供的generics.xaml文件,但这将修改我正在使用的所有ComboBoxItems es。我可以创建一个继承自ComboBox的自定义控件,但是每当我想要更改此颜色时,是否需要我编写一个新控件?必须有一种更简单的方法来改变它。

@Bart这是我在ComboBox中弹出模板的模板中找到的代码。我不确定你的解释中“SystemControlBackgroundChromeMediumLowBrush”来自哪里。

ComboBox

1 个答案:

答案 0 :(得分:3)

您永远不应该触摸SDK文件夹中的generics.xaml文件,该文件是"系统文件"。这就像更改Windows安装中的某些文件以更改图标浏览器(并可能导致其他应用程序也更改此设置)。

有多种解决方案:

  • Edit the control's template在您自己的应用中(使用Visual Studio,Blend或只是复制default template。如果您让它未命名(通过设置x:Key命名模板),它将被应用对于你的所有ComboBox es。如果你只想要更改一些,你应该给它一个密钥并将其用作StaticResource

您要查找的代码是模板中的Popup控件。

<Popup x:Name="Popup">
    <Border
        x:Name="PopupBorder"
        Background="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}"
        BorderBrush="{ThemeResource SystemControlForegroundChromeHighBrush}"
        BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}"
        Margin="0,-1,0,-1"
        HorizontalAlignment="Stretch">
  • 覆盖ThemeResource以获得另一种颜色。请注意,这会对使用相同ThemeResource的应用中的其他控件产生影响。但这仍然比更改generics.xaml要好得多,而且比重新定义模板要少。

这是通过重新定义资源键来完成的。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Dark">
                <SolidColorBrush x:Key="SystemControlBackgroundChromeMediumLowBrush" Color="DarkGray" />
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>
相关问题