Я создал простой раздетый стиль ListView, который выделяет элемент, когда свойство IsMouseOver
имеет значение true. Это делается путем запуска в ItemContainerStyle. Это прекрасно работает, и xaml выглядит так:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<!--UserControl with actual content goes here-->
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<!--here is a border with the ContentPresenter inside-->
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Lime"/>
</Trigger>
</Style.Triggers>
</Style>
<ListView.ItemContainerStyle>
</ListView>
Однако мне также хотелось бы, чтобы цвет, установленный при наведении, остался, когда контекстное меню фактического элемента показывается щелчком правой кнопкой мыши по нему. По сути, этот вопрос похож на этот , за исключением того, что я не могу использовать (в противном случае отличный) ответ: идея состоит в том, чтобы добавить триггер для проверки, когда открыто контекстное меню:
<DataTrigger Binding="{Binding ContextMenu.IsOpen}" Value="True">
<Setter Property="Background" Value="Lime"/>
</DataTrigger>
Вопрос в том, какое связывающее выражение я должен ввести, чтобы выяснить, что ContextMenu.IsOpen
для фактического содержимого, установленного в DataTemplate? Я пробовал все виды вещей, таких как ссылки на ContentPresenter.ContextMenu.IsOpen и т. Д., Но ничего не получалось.
Помимо использования ContextMenu.IsOpen, я уже пробовал множество комбинаций триггеров на IsSelected, триггеров событий на MouseLeave и т. Д., Но также безрезультатно. Итак, второй вопрос: если трюк с контекстным меню не работает, есть ли другой способ получить этот эффект? По сути, мне нужно представление списка, которое не поддерживает выбор любого вида, но показывает пользователю, у какого элемента находится мышь, независимо от того, частично ли оно скрывает меню или нет.