WPF ListViewItem потерял фокус события - Как попасть на событие?
У меня есть список, в котором вы выбираете строку / элемент. Это связано с датгергером, который отображает изображение в строке. Изображение должно отображаться только при выбранной строке.
Эта часть работает нормально, однако, когда вы перемещаете фокус на что-то другое, например, на текстовое поле или отображается окно сообщения, элемент списка просмотра теряет фокус, т.е. выделение строки больше не отображается. Проблема в том, что мой имидж все еще остается. Он должен быть скрыт / свернут, когда вид списка теряет фокус... Он отлично работает, если вы выбираете другой элемент / строку в списке.
Может ли кто-нибудь помочь в этом, пожалуйста?
<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 ответа
Я думаю, что вы путаете IsSelected и IsFocused.
Поэкспериментируйте с привязкой ваших триггеров к IsFocused вместо IsSelected, чтобы получить желаемый результат.
Если я правильно понимаю, вы хотите, чтобы изображение было видимым, только если IsSelected и IsFocused имеют значение true, иначе скрыты.
Один из способов сделать это - установить Visibility по умолчанию на Visible, а затем добавить два триггера, которые устанавливают Visibility на Hidden: один триггер для IsSelected = False, а другой триггер для IsFocused = False.
Или наоборот, установите видимость по умолчанию на Hidden и используйте MultiTrigger с IsSelected = True и IsFocused = True, чтобы установить для Visibility значение Visible.
@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