проблема с щелчком правой кнопкой мыши в wpf listview
-
21-08-2019 - |
Вопрос
итак, я прикрепил контекстное меню (контекстное меню, вызываемое правой кнопкой мыши) к wpf listview.
к сожалению, когда вы щелкаете правой кнопкой мыши, появляется как меню, так и выбирает какой бы предмет у вас ни закончился.Есть ли способ отключить это поведение выбора при щелчке правой кнопкой мыши, сохраняя при этом контекстное меню?
Решение
Ключ заключается в установке события PreviewMouseRightButtonDown в правильном месте.Как вы заметите, даже без ContextMenu щелчок правой кнопкой мыши на ListViewItem выделит этот элемент, и поэтому нам нужно установить событие для каждого элемента, а не для ListView.
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseRightButtonDown"
Handler="OnListViewItemPreviewMouseRightButtonDown" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Menu Item">Item 1</MenuItem>
<MenuItem Header="Menu Item">Item 2</MenuItem>
</ContextMenu>
</ListView.ContextMenu>
<ListViewItem>Item</ListViewItem>
<ListViewItem>Item</ListViewItem>
<ListViewItem>Item</ListViewItem>
<ListViewItem>Item</ListViewItem>
<ListViewItem>Item</ListViewItem>
<ListViewItem>Item</ListViewItem>
</ListView>
private void OnListViewItemPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
Trace.WriteLine("Preview MouseRightButtonDown");
e.Handled = true;
}
Поскольку события предварительного просмотра являются прокладывание туннелей это заблокирует появление RightMouseButtonDown в элементах ListViewItems, предотвращая их выбор, но не предотвратит появление RightMouseButtonDown в ListView и, таким образом, по-прежнему позволит открыть ContextMenu.
Другие советы
эта ссылка также кажется полезной:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/e7f213e3-d8c0-4d13-8c39-51b214715c8a