2009-07-02 5 views
9

so habe ich ein Kontextmenü (Rechtsklick-Menü) an eine WPF-Listview angefügt.wpf listview Rechtsklick-Problem

unglücklicherweise, wenn Sie mit der rechten Maustaste klicken, wird sowohl das Menü angezeigt und wählt, was auch immer Artikel Sie sind vorbei. Gibt es eine Möglichkeit, dieses Rechtsklick-Auswahlverhalten zu deaktivieren und trotzdem das Kontextmenü zuzulassen?

Antwort

18

Der Schlüssel setzt das PreviewMouseRightButtonDown-Ereignis an der richtigen Stelle. Wie Sie sehen werden, wird auch ohne ContextMenu ein Rechtsklick auf ein ListViewItem dieses Element auswählen. Daher müssen wir das Ereignis für jedes Element und nicht für die ListView festlegen.

<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; 
} 

Da die Vorschau Ereignisse sind tunneling dies die RightMouseButtonDown von dem Auftreten auf dem Listviewitem blockiert sie daran gehindert wird, ausgewählt zu werden, aber nicht die RightMouseButtonDown auf dem Listview verhindern und so immer noch erlauben, die ContextMenu zu öffnen.

+0

ja das ist genau das, was ich brauchte. Es funktioniert perfekt. Vielen Dank! – KevinDeus