Событие WPF ListViewItem lost focus - Как попасть на мероприятие?

StackOverflow https://stackoverflow.com/questions/466555

Вопрос

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

Эта часть работает нормально, однако, когда вы перемещаете фокус на что-то другое, например, текстовое поле, или отображается messagebox, listviewitem теряет фокус, т. Е. выделение в строке больше не отображается.Проблема в том, что мой образ все еще сохраняется.Он должен быть скрыт / свернут, когда listview теряет фокус...Это отлично работает, если вы выберете другой элемент / строку в 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>

С уважением

ТрэвисПУК

Это было полезно?

Решение

Я думаю, вы путаете IsSelected и isFocused.

Поэкспериментируйте с привязкой ваших триггеров к Сфокусирован вместо IsSelected выбирается для получения желаемого результата.

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

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

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

Другие советы

@Bubblewrap Пузырчатая Пленка,

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

Это то, к чему я в итоге пришел.

<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, вероятно, сейчас избыточен.

Спасибо

ТрэвисПУК

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top