Comment changer l'arrière-plan de la liste déroulante ComboBox?


Mapplesoft

J'ai un ComboBoxprojet UWP que je souhaite modifier. Je veux changer la couleur d'arrière-plan du StackPanel(?) Contenant le ComboBoxItems, mais je n'ai pas trouvé de moyen simple de le faire.

Ici, je veux changer la couleur du rembourrage gris clair.

Combobox ouverte

La couleur entourant le ComboBoxItemsdoit correspondre, mais c'est le gris par défaut qui ressort.

Voici un exemple où MSN Money ComboBoxa une couleur de remplissage personnalisée pour correspondre à la ComboBoxItems. C'est ce que j'espère réaliser.

Combobox MSN Money

J'utilise le mot "padding", mais il s'agit en réalité de la couleur de l'élément contenant le ComboBoxItems.

As I understand it, I have to modify the provided generics.xaml file in the Windows 10 SDK, but that will modify all of the ComboBoxes I'm using. I could create a custom control that inherits from ComboBox, but wouldn't that require me to write a new control whenever I wanted to change this color? There has to be an easier way to change this.

@Bart This is the code I found in the template for the Popup in the ComboBox. I am not sure where "SystemControlBackgroundChromeMediumLowBrush" came from in your explanation.

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

You should NEVER touch the generics.xaml file in the SDK folder, that's a "system file". That's like changing some file deep in your Windows installation to change an icon explorer (and might result in other applications to change this as well).

There are multiple solutions:

  • Modifiez le modèle du contrôle dans votre propre application (avec Visual Studio, Blend ou en copiant simplement le modèle par défaut . Si vous le laissez sans nom (nommez un modèle en définissant x:Key), il sera appliqué à tous vos ComboBoxes. Si vous ne voulez que quelques modifications, vous devriez lui donner une clé et l'utiliser comme StaticResource.

Le morceau de code que vous recherchez est le contrôle Popup dans le modèle.

<Popup x:Name="Popup">
    <Border
        x:Name="PopupBorder"
        Background="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}"
        BorderBrush="{ThemeResource SystemControlForegroundChromeHighBrush}"
        BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}"
        Margin="0,-1,0,-1"
        HorizontalAlignment="Stretch">
  • Remplacez le ThemeResourcepour lui donner une autre couleur. Notez que cela aura un effet sur les autres contrôles de votre application en utilisant le même ThemeResource. Mais c'est toujours beaucoup mieux que de changer le generics.xaml et moins de travail que de redéfinir le modèle.

Cela se fait en redéfinissant la clé de ressource.

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

Articles connexes


changer la couleur d'arrière-plan de la liste déroulante

rimi J'édite un site Web écrit par un ancien employé qui n'est plus dans l'entreprise, on me demande d'ajouter une liste déroulante sur le site Web. L'ajout d'une liste déroulante est très simple, mais la couleur d'arrière-plan de cette liste déroulante est to