2009-07-02 10 views
9

, dlatego też dołączyłem menu kontekstowe (menu podręczne po kliknięciu prawym przyciskiem myszy) do widoku listy wpf.WPF listview kliknij prawym przyciskiem myszy problem

Niestety, po kliknięciu prawym przyciskiem myszy pojawia się menu i wybiera niezależnie od przedmiotu, w którym się znajdujesz. Czy istnieje sposób, aby wyłączyć to kliknięcie prawym przyciskiem myszy, zachowując jednocześnie menu kontekstowe?

Odpowiedz

18

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.

+0

tak to jest dokładnie to, co potrzebne. Działa idealnie. Dzięki! – KevinDeus