Klawisz ustawia wydarzenie PreviewMouseRightButtonDown we właściwym miejscu. Jak można zauważyć, nawet bez ContextMenu kliknięcie prawym klawiszem na ListViewItem wybierze ten element, dlatego musimy ustawić zdarzenie na każdym elemencie, a nie na 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;
}
Ponieważ zdarzenia podglądu są tunneling to zablokuje RightMouseButtonDown z występujących na ListViewItems uniemożliwiającymi ich wybiera, ale nie zapobiegają RightMouseButtonDown na ListView i tak nadal pozwalają Otwórz menu kontekstowe.
tak to jest dokładnie to, co potrzebne. Działa idealnie. Dzięki! – KevinDeus