2009-07-02 166 views
9

所以我將一個上下文菜單(右鍵單擊菜單)附加到一個wpf listview。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防止它們被選擇的發生,但不能防止對ListView中RightMouseButtonDown等仍然允許ContextMenu打開。

+0

是的,這是我需要什麼。它完美的作品。謝謝! – KevinDeus 2009-07-02 16:51:37