wpf listview проблема правого клика
Поэтому я прикрепил контекстное меню (контекстное меню) к списку wpf.
к сожалению, когда вы щелкаете правой кнопкой мыши, он вызывает меню и выбирает любой пункт, над которым вы находитесь. Есть ли способ отключить это поведение при щелчке правой кнопкой мыши, но при этом разрешить контекстное меню?
2 ответа
Ключ устанавливает событие 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