2009-07-02 14 views
9

, así que adjunté un menú contextual (menú contextual) a una lista de wpf.wpf listview haz clic derecho en el problema

desafortunadamente, cuando hace clic con el botón derecho, aparece el menú y selecciona cualquier elemento que esté sobre. ¿Hay alguna manera de cerrar este clic derecho en seleccionar el comportamiento mientras se sigue permitiendo el menú contextual?

Respuesta

18

La clave es establecer el evento PreviewMouseRightButtonDown en el lugar correcto. Como notará, incluso sin un ContextMenu, al hacer clic con el botón derecho en un ListViewItem, se seleccionará ese elemento, por lo que debemos establecer el evento en cada elemento, no en 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; 
} 

Desde los acontecimientos de vista previa son tunneling esto bloqueará el RightMouseButtonDown que se produzcan en los ListViewItems que les impiden ser seleccionado, pero no impide que el RightMouseButtonDown en el ListView y así todavía permiten la ContextMenu para abrir.

+0

sí, esto es exactamente lo que necesitaba. Funciona perfectamente ¡Gracias! – KevinDeus

Cuestiones relacionadas