Domanda

Ho una visualizzazione elenco su cui selezionare una riga / elemento. Questo è collegato a un datatrigger che visualizza un'immagine sulla riga. L'immagine dovrebbe essere visualizzata solo quando è selezionata la riga.

Questa parte funziona perfettamente, tuttavia quando si sposta lo stato attivo su qualcos'altro, ad esempio una casella di testo o viene visualizzata una finestra di messaggio, il listviewitem perde lo stato attivo, ovvero l'evidenziazione sulla riga non viene più visualizzata. Il problema è che la mia immagine rimane ancora. Dovrebbe essere nascosto / compresso quando la visualizzazione elenco perde lo stato attivo ... Funziona bene se si seleziona un elemento / riga diversi nella visualizzazione elenco.

Qualcuno può aiutare su questo per favore?

<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>

Saluti

TravisPUK

È stato utile?

Soluzione

Penso che tu stia confondendo IsSelected e IsFocused.

Sperimenta come associare i trigger a IsFocused anziché IsSelected per ottenere il risultato desiderato.

Se ho capito bene, vuoi che l'immagine sia visibile solo se IsSelected e IsFocused sono vere, altrimenti nascoste.

Un modo per farlo è impostare Visibilità predefinita su Visibile, quindi aggiungere due trigger che impostano Visibilità su Nascosto: un trigger per IsSelected = False e un altro trigger per IsFocused = False.

O viceversa, imposta Visibilità predefinita su Nascosto e usa un MultiTrigger con IsSelected = True e IsFocused = True per impostarlo su Visible

Altri suggerimenti

@Bubblewrap,

Grazie per l'informazione, questo problema si è risolto abbastanza bene. Come di seguito ho dovuto aggiungere entrambi gli scenari poiché l'impostazione predefinita non sembra avere effetto ... tuttavia non ho ancora provato il metodo MultiTrigger, lo farà in seguito.

Questo è quello che sono finito alla fine.

<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>

Grazie per il tuo aiuto, questo per ora mi farà superare il mio problema. Penso che il mio trigger IsEnabled sia probabilmente ora ridondante.

Grazie

TravisPUK

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top