Comment changer l'arrière-plan de la liste déroulante ComboBox?
J'ai un ComboBox
projet 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.
La couleur entourant le ComboBoxItems
doit correspondre, mais c'est le gris par défaut qui ressort.
Voici un exemple où MSN Money ComboBox
a une couleur de remplissage personnalisée pour correspondre à la ComboBoxItems
. C'est ce que j'espère réaliser.
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 ComboBox
es 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}"
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 vosComboBox
es. Si vous ne voulez que quelques modifications, vous devriez lui donner une clé et l'utiliser commeStaticResource
.
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
ThemeResource
pour lui donner une autre couleur. Notez que cela aura un effet sur les autres contrôles de votre application en utilisant le mêmeThemeResource
. 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>