WPF ListView Inactif Couleur de Sélection
Je suis de la création d'une application WPF où plusieurs ListView les sélections sont faites dans une ligne (similaire au navigateur iTunes). Le problème est que la valeur par défaut inactif sélection de la couleur est trop claire. (voir ci-dessous)
Comment puis-je changer cette couleur si mon inactifs listview ressemble à ceci? (voir ci-dessous)
Solution
Remplacer la valeur par défaut SystemColor avec un Style
comme suit:
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
</Style.Resources>
</Style>
InformationsquelleAutor Joseph Sturtevant | 2008-12-19
Vous devez vous connecter pour publier un commentaire.
La
ListBox
modèle utilise un système de couleur appeléControlBrush
pour définir les inactifs couleur de surbrillance. Par conséquent, vous pouvez simplement remplacer que la couleur:Changer
SystemColors.ControlBrushKey
ne fonctionne pas pour moi, j'ai dû changerSystemColors.InactiveSelectionHighlightBrushKey
Ainsi, au lieu de:
J'ai eu à utiliser:
La réponse sera dans certains cas de résoudre le problème, mais n'est pas idéal, car il se brise lorsque le contrôle est désactivé/readonly et il remplace également les schémas de couleurs, plutôt que de profiter d'eux. Ma suggestion est d'ajouter le texte suivant dans la zone de liste de tags lieu:
Ce que cela va faire est de définir le point culminant couleur d'arrière-plan sur l'élément de zone de liste lorsqu'il est sélectionné (indépendamment du contrôle de l'état).
Ma réponse est basée sur l'aide de la réponse déjà donnée, ainsi que le blog suivant: http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx
ListBoxItem
directement remplace laBackground
via IsSelected de déclenchement (cela fonctionne pour de nombreuses propriétés, mais pas pour le fond). Je suppose que c'est un problème avec l'ordre d'exécution des différents déclencheurs. Vous avez vraiment de remplacer le modèle de contrôle.Vous devez remplacer certaines propriétés de SystemColors. Jetez un oeil à SystemColors Classe (MSDN). Il y a plus de propriétés que InactiveSelectionHighlightBrushKey, par exemple InactiveSelectionHighlightTextBrushkey qui affecte la couleur du texte.
En plus .NET Cadres primordial de couleurs du système ne fonctionne pas. Solution qui fonctionne .NET Framework 4.0 est ici.
Fonctionne à la fois pour ListBox et ListView.
Basé sur cette autre réponse j'ai utilisé le suivre pour faire le active & inactif couleurs, même sans le coder en dur la valeur réelle:
Ayant la même couleur pour à la fois active & inactif ne peut pas être idéal, mais les couleurs par défaut étaient si faibles qu'il est difficile de dire quel élément a été sélectionné lorsqu'il est inactif, ce qui est une nette amélioration.
Pour moi ce qui a fait le tour: