L'élément sélectionné perd du style lorsque le focus est déplacé dans la ListBox WPF

Qu'est-ce que j'ai?

J'ai un ListBox rempli avec des éléments d'un fichier XML. Étant donné une propriété DynamicResource pour Style et un déclencheur écrit pour IsSelected dans ItemContainerStyle.

Qu'est-ce que je veux faire?

Je veux garder l'élément sélectionné en surbrillance même après que le focus soit sorti du ListBox.

Quel problème suis-je confronté?

Lorsque je sélectionne un élément du style spécifié dans IsSelected déclencheur fonctionne. Mais, quand je déplace le focus hors de la zone de liste (appuyez sur onglet ou cliquez sur un autre contrôle) l'élément sélectionné perd son style. Est - il possible de conserver le style d'élément sélectionné?

Merci d'avance!

21
demandé sur Dave Clemmer 2009-09-22 23:53:30

2 réponses

Si vous définissez uniquement la couleur d'arrière - plan, essayez de remplacer ControlBrush pour la ListBox, selon cette réponse.

1
répondu SLaks 2017-05-23 12:18:24

La réponse référencée résoudra dans certains cas le problème, mais n'est pas idéale car elle se casse lorsque le contrôle est désactivé / en lecture seule et remplace également les schémas de couleurs, plutôt que d'en tirer parti. Ma suggestion est d'ajouter ce qui suit dans les balises ListBox:

<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 la couleur D'arrière-plan de surbrillance sur l'élément de la zone de liste chaque fois qu'il est sélectionné (quel que soit l'état du contrôle).

Ma réponse est basée sur l'aide des réponses déjà données à ces réponses, ainsi que le blog suivant: http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx

29
répondu Thies 2010-09-09 08:55:00