2009-07-02 16 views
9

quindi ho collegato un menu di scelta rapida (menu di scelta rapida) a una lista di wpf.wpf listview right-click problem

sfortunatamente, quando si fa clic con il pulsante destro del mouse, viene visualizzato sia il menu che seleziona qualsiasi elemento in cui si trova. Esiste un modo per disattivare questo comportamento di selezione del clic con il tasto destro mentre si consente comunque il menu di scelta rapida?

risposta

18

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.

+0

sì questo è esattamente quello che mi serviva. Funziona perfettamente. Grazie! – KevinDeus