La chiave sta impostando l'evento PreviewMouseRightButtonDown nella posizione corretta. Come noterai, anche senza un ContextMenu che fa clic con il pulsante destro del mouse su un oggetto ListViewItem selezionerai quell'elemento e quindi dovremo impostare l'evento su ciascun elemento, non su 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;
}
Poiché gli eventi anteprima sono tunneling poiché possono impedire la RightMouseButtonDown di verificarsi sulle ListViewItems impedendone selezionata, ma non impedire il RightMouseButtonDown sul ListView e quindi consentono ancora la ContextMenu da aprire.
sì questo è esattamente quello che mi serviva. Funziona perfettamente. Grazie! – KevinDeus