Ключ устанавливает событие 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;
}
Поскольку предварительный просмотр события tunneling это будет блокировать RightMouseButtonDown от происходящих на ListViewItems, предотвращающих их выбирают, но не предотвратить RightMouseButtonDown на ListView и так до сих пор позволяют ContextMenu для открытия.
да это именно то, что мне было нужно. Он работает отлично. Благодаря! – KevinDeus