66 votes

Couleur de sélection inactive WPF ListView

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) Image Hosted by ImageShack.us

Comment puis-je changer cette couleur si mon inactifs listview ressemble à ceci? (voir ci-dessous) Image Hosted by ImageShack.us

Solution

Remplacer la valeur par défaut SystemColor avec un Style comme:

<Style TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
    </Style.Resources>
</Style>

65voto

user672951 Points 261

Changer SystemColors.ControlBrushKey n'a pas fonctionné pour moi, j'ai dû changer SystemColors.InactiveSelectionHighlightBrushKey

Donc au lieu de:

 <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red />
 

Je devais utiliser:

 <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
 

60voto

Kent Boogaart Points 97432

Le modèle ListBox utilise une couleur système appelée ControlBrush pour définir la couleur de surbrillance inactive. Par conséquent, vous pouvez simplement remplacer cette couleur:

 <ListBox>
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}">Red</SolidColorBrush>
    </ListBox.Resources>
</ListBox>
 

20voto

Thies Points 1795

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:

<ListBox....>
    <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="Border" Property="Background"
                                            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
        </Style>
    </ListBox.Resources>
</ListBox>

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X