WPF ListViewItem потерял фокус события - Как попасть на событие? - PullRequest
3 голосов
/ 21 января 2009

У меня есть просмотр списка, в котором вы выбираете строку / элемент. Это связано с датгергером, который отображает изображение в строке. Изображение должно отображаться только при выбранной строке.

Эта часть работает нормально, однако, когда вы перемещаете фокус на что-то другое, например, текстовое поле или окно сообщения, элемент listview теряет фокус, т.е. выделение строки больше не отображается. Проблема в том, что мой имидж все еще остается. Он должен быть скрыт / свернут, когда вид списка теряет фокус ... Он отлично работает, если вы выбираете другой элемент / строку в списке.

Может кто-нибудь помочь с этим, пожалуйста?

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

Привет

TravisPUK

Ответы [ 2 ]

3 голосов
/ 22 января 2009

Я думаю, что вы путаете IsSelected и IsFocused.

Поэкспериментируйте с привязкой триггеров к IsFocused вместо IsSelected, чтобы получить желаемый результат.

Если я правильно понимаю, вы хотите, чтобы изображение было видимым, только если IsSelected и IsFocused имеют значение true, иначе скрыты.

Один из способов сделать это - установить Visibility по умолчанию на Visible, а затем добавить два триггера, которые устанавливают Visibility на Hidden: один триггер для IsSelected = False, а другой триггер для IsFocused = False.

Или наоборот, установите видимость по умолчанию на Скрытый и используйте MultiTrigger с IsSelected = True и IsFocused = True, чтобы установить для Visibility значение Visible

0 голосов
/ 22 января 2009

@ Bubblewrap

Спасибо за информацию, это довольно хорошо обошло проблему. Как показано ниже, мне пришлось добавить в обоих сценариях, так как по умолчанию, кажется, не вступает в силу ... однако я еще не пробовал метод MultiTrigger, сделаю позже.

Это то, чем я закончил в конце.

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

Спасибо за вашу помощь, это поможет мне преодолеть мою проблему. Я думаю, что мой триггер IsEnabled, вероятно, сейчас избыточен.

Спасибо

TravisPUK

...