【问题标题】:How to change ComboBox Dropdown Background?如何更改组合框下拉背景?
【发布时间】:2018-04-16 18:54:45
【问题描述】:

我想修改一个 UWP 项目中的 ComboBox。我想更改包含ComboBoxItemsStackPanel(?) 的背景颜色,但我还没有找到一种简单的方法来做到这一点。

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

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

这是一个示例,其中 MSN Money 的 ComboBox 具有自定义填充颜色以匹配 ComboBoxItems。这是我希望实现的目标。

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

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

@Bart 这是我在 ComboBox 中的 Popup 模板中找到的代码。我不确定您的解释中“SystemControlBackgroundChromeMediumLowBrush”的出处。

<Popup x:Name="Popup">
    <Border x:Name="PopupBorder"
        Background="{ThemeResource ComboBoxDropDownBackground}"
        BorderBrush="{ThemeResource ComboBoxDropDownBorderBrush}"
        BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}"

【问题讨论】:

    标签: xaml colors combobox uwp


    【解决方案1】:

    您不应该触摸 SDK 文件夹中的 generics.xaml 文件,这是一个“系统文件”。这就像更改 Windows 安装中的某个文件以更改图标资源管理器(并且可能导致其他应用程序也更改此设置)。

    有多种解决方案:

    • Edit the control's template 在您自己的应用程序中(使用 Visual Studio、Blend 或简单地复制 default template。如果您让它未命名(通过设置 x:Key 命名模板),它将应用于您的所有 ComboBoxes。如果你只想要一些改变,你应该给它一个密钥并将其用作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>
    

    【讨论】:

    • 第二个解决方案不起作用,直到我意识到 App.xaml 有一行手动将 RequestedTheme 设置为 Light,我立即将其删除。我试过创建一个模板,但这对我的控件没有影响。至于 XAML 的第一块,你是从哪里复制的?
    • XAML 的第一块来自默认模板(在答案中链接)。要使用自己创建的模板,请阅读答案中的链接,因为它应该可以工作(使用键 + StaticResource 或重新定义应用程序中所有控件的默认模板)。但我很高兴你至少能以第二种方式工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2020-09-02
    • 1970-01-01
    • 2016-07-09
    • 2018-12-26
    • 2018-07-19
    相关资源
    最近更新 更多