58 votes

Déclencheur WPF pour IsSelected dans un DataTemplate pour les éléments de la ListBox

J'ai une listbox, et j'ai la ItemTemplate suivante pour elle:

Comme vous pouvez le voir, le ContentControl a la Visibilité définie sur "Collapsed".

Je dois définir un déclencheur qui fait que la Visibilité soit définie sur "Visible"

lorsque l'élément de la liste est sélectionné, mais je n'arrive pas à comprendre.

Des idées?

MISE À JOUR: Bien sûr, je pourrais simplement dupliquer le DataTemplate et ajouter des déclencheurs à la ListBox en question pour utiliser l'un ou l'autre, mais je veux éviter de dupliquer ce code.

115voto

Matt Hamilton Points 98268

Vous pouvez styliser votre ContentControl de telle sorte qu'un déclencheur se déclenche lorsque son conteneur (le ListBoxItem) est sélectionné :

            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger
                        Binding="{Binding
                            RelativeSource={RelativeSource
                                Mode=FindAncestor,
                                AncestorType={x:Type ListBoxItem}},
                                Path=IsSelected}"
                        Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>

Alternativement, je pense que vous pouvez ajouter le déclencheur au modèle lui-même et référencer le contrôle par son nom. Je ne connais pas assez bien cette technique pour l'écrire de mémoire et je suppose que ça fonctionnera, mais c'est quelque chose comme ceci :

    ...

3voto

TimothyP Points 6043

@Matt, Merci!!!

J'ai juste ajouté un déclencheur pour IsSelected == false également, et maintenant ça marche parfaitement!

    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
            <Setter Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
    </Style.Triggers>

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