2010-10-14 31 views
7

Tôi đang cố thêm ContextMenu vào các mục trong ListBox trong WPF;WPF: Cách mở ContextMenu từ tất cả các vùng của điều khiển Lưới

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border>       
      <Grid> 
       <Grid.ContextMenu> 
        <ContextMenu>          
         <MenuItem Header = "Menu item 1"/> 
         <MenuItem Header = "Menu item 2"/> 
         <MenuItem Header = "Menu item 3"/> 
        </ContextMenu> 
       </Grid.ContextMenu> 
        ........ 
        ........ 
      </Grid> 
     </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 

Vấn đề là ContextMenu sẽ chỉ mở khi nhấp vào ngữ cảnh thực tế của lưới, tôi muốn có thể mở menu bằng cách nhấp vào bất kỳ đâu trên mục Listbox.

Tôi có nên bọc lưới vào một số điều khiển khác không?

+0

Xem http://stackoverflow.com/questions/13420994/how-to-display-context-menu-for-treeview-item- in-a-hierarchial-data-template-in/28310591 # 28310591 – Contango

Trả lời

17

Đã một vài tháng kể từ khi tôi thực hiện bất kỳ phát triển WPF vững chắc nào (đã được chuyển từ phát triển ứng dụng sang một nhóm trò chơi thực tế).

Từ bộ nhớ, bạn muốn đặt thuộc tính ContextMenu trên Border và sau đó đặt Border.Background=Transparent. Đặt nền thành trong suốt đảm bảo rằng nó sẽ được tham gia vào phát hiện lần truy cập.

Giải pháp thay thế, sẽ đảm bảo bạn Grid yếu tố trải dài theo chiều ngang và theo chiều dọc để vừa với vùng chứa.

...

Cũng kéo ContextMenu ra như một nguồn lực tĩnh, vì vậy đó là sẽ dễ dàng hơn để tìm/chỉnh sửa trong tương lai.

Hy vọng điều này sẽ giúp (và bộ nhớ của tôi không làm hỏng tôi).

EDIT: Tôi đã trả lời câu hỏi tương tự trên StackOverflow trước đây, vui lòng xem câu trả lời của tôi trên WPF: Displaying a Context Menu for a GridView's Items. Câu trả lời này hoàn chỉnh hơn vì nó tập trung vào số ListItem.

2

Như bạn đã nhận ra, - nhờ Dennis, - bạn phải thiết lập một số nền tảng. Vâng, nền trong suốt cũng là OK:

  <Grid Background="Transparent"> 
      <Grid.ContextMenu> 
       <ContextMenu>          
        <MenuItem Header = "Menu item 1"/> 
        <MenuItem Header = "Menu item 2"/> 
        <MenuItem Header = "Menu item 3"/> 
       </ContextMenu> 
      </Grid.ContextMenu> 
       ........ 
       ........ 
     </Grid> 

THAM KHẢO: https://blogs.msdn.microsoft.com/domgreen/2008/12/08/wpf-hit-testing-with-event-bubbling/

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