2010-12-11 40 views
6

tôi muốn cho Listbox của tôi trong WPF một contextmenu. Tôi đã làm điều đó với một contextmenu cho toàn bộ listbox, nhưng bạn có thể richt-click để có được contextmenu ngay cả khi bạn không bấm vào một mục.C#: Listbox Contextmenu cho Listboxitems (WPF)

Tôi đã tìm thấy thứ gì đó ở google, nhưng điều này không hiệu quả.

tôi đã cố gắng một cái gì đó như thế này:

<ListBox Margin="5" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding Name}" Click="MenuItemName_Click"/> 
         <MenuItem Header="{Binding Capital}" Click="MenuItemCapital_Click"/> 
         <MenuItem Header="{Binding Population}" Click="MenuItemPopulation_Click"/> 
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Tôi đã thử nó với một TextBlock như trong ví dụ, với các yếu tố khác như trong hướng dẫn khác, tôi mệt mỏi mà không và nhiều things- khác nhưng không làm việc. Không ContextMenu cho các hạng mục listbox của tôi :(

sau tôi đã cố gắng một cái gì đó như thế này:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <ListBoxItem> 
      <ListBoxItem.ContextMenu> 
       <ContextMenu> 
        <MenuItem/> 
       </ContextMenu> 
      </ListBoxItem.ContextMenu> 
     </ListBoxItem> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

Nhưng nó đã không làm việc quá

Ai đó có thể cho tôi một gợi ý/example làm việc :).?

cảm ơn bạn

+0

gì chính xác không hoạt động? Bạn cần phải cụ thể hơn ... Bạn đã kiểm tra cửa sổ đầu ra trong VS cho các lỗi ràng buộc? –

Trả lời

13

tôi sẽ thiết lập các ContextMenu trong phong cách 's ListBoxItem, chứ không phải trong DataTemplate:

<ListBox Name="simpleListBox" 
     ItemsSource="{Binding SimpleList}" 
     DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         ... 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

@Thomas, tôi ràng buộc Lệnh với một RelayCommand trong MenuItem, nhưng RalayCommand không bao giờ được gọi. – SubmarineX

+0

@SubmarineX, bạn có thấy bất kỳ lỗi liên kết nào trong cửa sổ đầu ra không? Nếu bạn thấy một cái gì đó như "Không thể tìm thấy FrameworkElement quản lý ...", hãy xem [giải pháp này] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) –

+0

@ThomasLevesque cảm ơn u, bây giờ tôi đã hiểu rồi. Bởi vì datacontext của ListBoxItem không phải là datacontext của ListBox, vì vậy tôi ràng buộc lệnh vào datacontext của ListBoxItem, sau đó thông qua messager thông báo cho datacontext của listbox. Và sau đó tôi sẽ thấy giải pháp của bạn. – SubmarineX

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