web-dev-qa-db-fra.com

Comment changer la couleur de surbrillance de l'élément ListView sélectionné dans UWP (Windows 10)

Je travaille sur une application Windows 10 utilisant C # et XAML. J'ai un ListView et je souhaite modifier la couleur HighLight par défaut d'un élément sélectionné. Je voyais de nombreux exemples de code (comme this ) mais tous sont conçus pour WP8 ou Win8, j'essayais de les implémenter mais ils ne fonctionnent pas pour moi.

En général, j'ai des problèmes pour modifier les thèmes par défaut des contrôles car je ne trouve pas de documentation utile. Ce serait formidable si quelqu'un peut m'aider avec la couleur de surbrillance et me recommander également une bonne documentation.

23
alecardv

En fait, une meilleure façon de découvrir les propriétés de style consiste à utiliser Blend.

Tout d'abord, ouvrez votre page dans Blend. Ensuite, faites un clic droit sur votre ListView et allez

Modifier des modèles supplémentaires> Modifier le conteneur d'élément généré (ItemContainerStyle)> Modifier une copie.

Donnez-lui un nom et appuyez sur OK .

Maintenant, vous avez généré le style intégré complet pour vos ListViewItem et c'est là que vous pouvez trouver toutes les informations sur leur apparence, leurs animations et autres comportements visuels.

Vous devriez regarder ce morceau de code -

<ListViewItemPresenter CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       ContentMargin="{TemplateBinding Padding}" 
                       CheckMode="Inline" 
                       ContentTransitions="{TemplateBinding ContentTransitions}" 
                       CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}" 
                       DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" 
                       DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}" 
                       DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" 
                       FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}" 
                       FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}" 
                       HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                       PointerOverForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       PressedBackground="{ThemeResource SystemControlHighlightListMediumBrush}"
                       PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"
                       PointerOverBackground="{ThemeResource SystemControlHighlightListLowBrush}"
                       ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" 
                       SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}"
                       SelectionCheckMarkVisualEnabled="True" 
                       SelectedForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       SelectedPointerOverBackground="{ThemeResource SystemControlHighlightListAccentMediumBrush}" 
                       SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"
                       VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />

Voir la ligne SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"? C'est là que vous pouvez lui appliquer votre propre couleur. Gardez à l'esprit qu'il doit être de type Brush au lieu de Color.

21
Justin XL

Cela peut être réalisé dans XAML en remplaçant la ressource.

<ListView ...>
    <ListView.Resources>
        <SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="#FF0000" />
        <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="#FF0000" />
    </ListView.Resources>
</ListView>
9
Daniel Glick

Pour étendre la réponse de Bastecklein. Vous souhaitez utiliser App au lieu d'Application pour que cette méthode fonctionne dans un projet UWP. Vous pouvez utiliser ce code dans votre App.xaml.cs lorsque vous chargez votre cadre initial, ou vous pouvez simplement définir la couleur de ressource sur le code derrière la page que vous souhaitez affecter.

App.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
App.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);
3
Adam J Inks