如何更改组合框下拉菜单背景?
问题描述:
我在我想修改的UWP项目中有一个ComboBox
。我想更改包含ComboBoxItems
的StackPanel
(?)的背景颜色,但我还没有找到实现此目的的简单方法。如何更改组合框下拉菜单背景?
在这里,我想要改变浅灰色填充的颜色。
颜色围绕ComboBoxItems
应该匹配,而是它是代表了默认的灰色。
下面是一个示例,其中MSN Money的ComboBox
具有与ComboBoxItems
匹配的自定义填充颜色。这是我希望实现的。
我用的是“填充”,但它实际上是包含ComboBoxItems
元素的只是颜色。
据我所知,我必须修改Windows 10 SDK中提供的generics.xaml文件,但会修改我使用的所有ComboBox
es。我可以创建一个继承自ComboBox
的自定义控件,但是当我想要改变这种颜色时,这不需要我编写新的控件?必须有一个更简单的方法来改变这一点。
@Bart这是我在ComboBox中的Popup模板中找到的代码。我不确定在你的解释中“SystemControlBackgroundChromeMediumLowBrush”来自哪里。
<Popup x:Name="Popup">
<Border x:Name="PopupBorder"
Background="{ThemeResource ComboBoxDropDownBackground}"
BorderBrush="{ThemeResource ComboBoxDropDownBorderBrush}"
BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}"
答
您应该永远不要触摸SDK文件夹中的generics.xaml文件,这是一个“系统文件”。这就像更改Windows安装中的某个文件以更改图标浏览器(并可能导致其他应用程序更改此设置)。
有多种解决方案:
- 在自己的应用程序Edit the control's template(与Visual Studio,混合或通过简单地复制default template如果你让它无名(命名通过设置
x:Key
模板)也将被应用。您所有ComboBox
上课。如果你只想要一些改变,你应该给它一个密钥,并用它作为StaticResource
。
的一块你正在寻找的代码是在模板中的弹出式菜单控件。
<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>
第二个解决方案没有奏效,直到我意识到App.xaml有一行手动将RequestedTheme设置为Light,我立即将其删除。我试图创建一个模板,但是这对我的控件没有影响。 至于第一个XAML块,你从哪里复制的? – Mapplesoft
XAML的第一个块来自默认模板(链接在答案中)。要使用自己创建的模板,请阅读答案中的链接,因为它应该可以工作(使用键+ StaticResource或重新定义应用中所有控件的默认模板)。但我很高兴你至少能够以第二种方式工作。 – Bart