Question

J'ai une vue en liste sur laquelle vous sélectionnez une ligne / un élément. Ceci est lié à un datatrigger qui affiche une image sur la ligne. L'image ne doit être affichée que lorsque la ligne est sélectionnée.

Cette partie fonctionne correctement. Toutefois, lorsque vous déplacez le focus sur un autre élément, tel qu'un champ de texte ou un message, le listviewitem perd le focus, c'est-à-dire que la surbrillance de la ligne n'est plus affichée. Le problème est que mon image reste toujours. Il doit être masqué / réduit lorsque la vue de liste perd le focus ... Cela fonctionne correctement si vous sélectionnez un autre élément / une autre rangée dans la liste.

Quelqu'un peut-il aider à ce sujet s'il vous plaît?

<Style x:Key="deleteImageStyle" TargetType="{x:Type Image}">
    <Setter Property="Source" Value="Resources/iconDelete.png" />
    <Setter Property="Margin" Value="0,2,5,0" />
    <Setter Property="Height" Value="16" />
    <Setter Property="Width" Value="16" />
    <Setter Property="HorizontalAlignment" Value="Right" />
    <Setter Property="VerticalAlignment" Value="Top" />
    <Setter Property="Cursor" Value="Hand" />
    <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="Hidden"/>
        </DataTrigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Visibility" Value="Hidden" />
        </Trigger>
    </Style.Triggers>
</Style>

Cordialement

TravisPUK

Était-ce utile?

La solution

Je pense que vous confondez IsSelected et IsFocused.

Essayez de lier vos déclencheurs à IsFocused au lieu de IsSelect pour obtenir le résultat souhaité.

Si je comprends bien, vous voulez que l'image soit visible uniquement si IsSelected et IsFocused sont vrais, sinon cachés.

Pour cela, définissez Visibilité par défaut sur Visible, puis ajoutez deux déclencheurs qui définissent Visibilité sur Masqué: un déclencheur pour IsSelected = False et un autre déclencheur pour IsFocused = False.

Ou l'inverse, définissez Visibility par défaut sur Caché et utilisez un MultiTrigger avec IsSelected = True et IsFocused = True pour le définir Visibility à Visible

Autres conseils

@Bubblewrap,

Merci pour l’information, le problème a été bien compris. Comme indiqué ci-dessous, j'ai dû ajouter des éléments dans les deux scénarios car la valeur par défaut ne semble pas prendre effet ... Cependant, je n'ai pas encore essayé la méthode MultiTrigger, je le ferai plus tard.

C’est ce à quoi j’ai abouti à la fin.

<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=IsFocused}" 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="Hidden"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsFocused}" Value="False">
                <Setter Property="Visibility" Value="Hidden"/>
            </DataTrigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Visibility" Value="Hidden" />
            </Trigger>
        </Style.Triggers>

Merci de votre aide, cela me permettra de résoudre mon problème pour le moment. Je pense que mon déclencheur IsEnabled est probablement redondant maintenant.

Merci

TravisPUK

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top