Pergunta

Eu tenho um listview que você selecionar uma linha / item. Isso está ligado a um DataTrigger que exibe uma imagem na linha. A imagem só deve ser exibida quando a linha é selecionada.

Esta parte funciona bem, no entanto, quando você mover o foco para outra coisa, como uma caixa de texto, ou um messagebox for exibido, o listviewitem perde o foco ou seja o destaque na linha não é mais exibido. O problema é que a minha imagem ainda permanece. Deve ser escondido / desmoronou quando o listview perde o foco ... Ele funciona muito bem se você selecionar um diferente ponto / linha na listview.

alguém pode ajudar sobre isso, 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>

Saudações

TravisPUK

Foi útil?

Solução

Eu acho que você está confundindo IsSelected e IsFocused.

Experiência com ligação seus gatilhos para IsFocused em vez de IsSelected para obter o resultado desejado.

Se bem entendi, você só deseja que a imagem a ser visível se ambos IsSelected e IsFocused são verdadeiras, caso contrário escondido.

Uma maneira de fazer isso é definir a visibilidade padrão para Visível, e em seguida, adicione dois gatilhos que definir a visibilidade como Oculto: um gatilho para IsSelected = False, e outro gatilho para IsFocused = false

.

Ou o contrário, conjunto padrão Visibilidade como Oculto, e usar um MultiTrigger com IsSelected = True e IsFocused = True para defini-la Visibilidade para Visível

Outras dicas

@Bubblewrap,

Obrigado pela informação, este muito bem tenho em torno da questão. Conforme abaixo eu tive que adicionar em ambos os cenários como o padrão parece não ter efeito ... no entanto eu não tentei o método MultiTrigger ainda, vai fazer mais tarde.

Isto é o que eu acabei com no 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>

Obrigado por sua ajuda, isso vai me passado o meu problema para agora. Eu acho que meu gatilho IsEnabled é provavelmente redundante agora embora.

Graças

TravisPUK

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top