2009-07-02 37 views
9

vì vậy tôi đã đính kèm một menu ngữ cảnh (menu chuột phải) vào danh sách wpf listview.wpf listview nhấp chuột phải vào bài toán

thật không may, khi bạn nhấp chuột phải, nó sẽ trả về cả menu và chọn bất kỳ mục nào bạn kết thúc. Có cách nào để tắt thao tác chọn nhấp chuột phải này trong khi vẫn cho phép menu ngữ cảnh không?

Trả lời

18

Điều quan trọng là đặt sự kiện PreviewMouseRightButtonDown ở đúng vị trí. Như bạn sẽ thấy, ngay cả khi không có ContextMenu, việc nhấn chuột phải vào một ListViewItem sẽ chọn mục đó, và vì vậy chúng ta cần thiết lập sự kiện trên mỗi mục chứ không phải trên 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; 
} 

Kể từ khi sự kiện preview là tunneling này sẽ chặn RightMouseButtonDown xảy ra trên ListViewItems ngăn ngừa chúng khỏi bị được lựa chọn, nhưng không ngăn cản việc RightMouseButtonDown trên ListView và do đó vẫn cho phép các ContextMenu để mở.

+0

có điều này là chính xác những gì tôi cần. Nó hoạt động hoàn hảo. Cảm ơn! – KevinDeus

Các vấn đề liên quan