Pregunta

Tengo una vista de lista en la que selecciona una fila / elemento. Esto está vinculado a un disparador de datos que muestra una imagen en la fila. La imagen solo debe mostrarse cuando se selecciona la fila.

Esta parte funciona bien, sin embargo, cuando mueve el foco a otra cosa, como un cuadro de texto o se muestra un cuadro de mensaje, el elemento de vista de lista pierde el foco, es decir, el resaltado en la fila ya no se muestra. El problema es que mi imagen aún permanece. Debe ocultarse / contraerse cuando la vista de lista pierde el foco ... Funciona bien si selecciona un elemento / fila diferente en la vista de lista.

¿Alguien puede ayudar en esto por favor?

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

Saludos

TravisPUK

¿Fue útil?

Solución

Creo que estás confundiendo IsSelected e IsFocused.

Experimente vinculando sus desencadenantes a IsFocused en lugar de IsSelected para obtener el resultado deseado.

Si entiendo correctamente, solo desea que la imagen sea visible si tanto IsSelected como IsFocused son verdaderas, de lo contrario están ocultas.

Una forma de hacerlo es establecer la Visibilidad predeterminada en Visible y luego agregar dos desencadenantes que establezcan Visibilidad en Oculto: un desencadenador para IsSelected = False y otro desencadenante para IsFocused = False.

O al contrario, establezca la Visibilidad predeterminada en Oculto, y use un MultiTrigger con IsSelected = True e IsFocused = True para establecer la Visibilidad en Visible

Otros consejos

@Bubblewrap,

Gracias por la información, esto se solucionó bastante bien. Como se muestra a continuación, tuve que agregar en ambos escenarios, ya que el valor predeterminado no parece tener efecto ... sin embargo, aún no he probado el método MultiTrigger, lo haré más tarde.

Esto es con lo que terminé al final.

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

Gracias por su ayuda, esto me ayudará a superar mi problema por ahora. Sin embargo, creo que mi disparador IsEnabled es probablemente redundante ahora.

Gracias

TravisPUK

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top