2009-07-02 3 views
9

, поэтому я подключил контекстное меню (меню с контекстным меню) к списку просмотров wpf.wpf listview щелкните правой кнопкой мыши проблему

К сожалению, при щелчке правой кнопкой мыши он вызывает оба меню, и выбирает независимо от того, что вы кончены. Есть ли способ отключить эту процедуру выбора правой кнопкой мыши, сохраняя при этом контекстное меню?

ответ

18

Ключ устанавливает событие PreviewMouseRightButtonDown в нужном месте. Как вы заметили, даже без ContextMenu, щелкнув правой кнопкой мыши на элементе ListViewItem, выберете этот элемент, и поэтому нам нужно установить событие для каждого элемента, а не в 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; 
} 

Поскольку предварительный просмотр события tunneling это будет блокировать RightMouseButtonDown от происходящих на ListViewItems, предотвращающих их выбирают, но не предотвратить RightMouseButtonDown на ListView и так до сих пор позволяют ContextMenu для открытия.

+0

да это именно то, что мне было нужно. Он работает отлично. Благодаря! – KevinDeus

Смежные вопросы