2010-12-11 98 views
6

我想我的列表框在WPF中的一個上下文菜單。 我用整個列表框的上下文菜單完成了它,但即使您不點擊某個項目,也可以通過richt-click來獲取上下文菜單。C#:列表框上下文菜單對於列表框項目(WPF)

我在google找到了一些東西,但是這並沒有奏效。

我想是這樣的:

<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> 

我用文字塊試圖像在本例中,與其他元素,如在其他教程中,我累了就沒有和其他許多東西 - 但毫無效果。無文本菜單爲我的列表框項目:(

後來我想是這樣的:

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

但它沒有工作過

有人可以給我一個提示/工作示例:)?

謝謝

+0

究竟不起作用?你需要更具體一些......你是否檢查了VS中的輸出窗口是否有綁定錯誤? – 2010-12-12 00:28:33

回答

13

我將設置ContextMenuListBoxItem的風格,而不是在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,我用MenuItem中的RelayCommand綁定Command,但是RalayCommand永遠不會被調用。 – SubmarineX 2013-11-18 07:07:00

+0

@SubmarineX,你能看到輸出窗口中的任何綁定錯誤嗎?如果您看到類似「找不到管理FrameworkElement ...」的內容,請查看[此解決方案](http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) – 2013-11-18 08:46:35

+0

@ThomasLevesque謝謝你,現在我明白了。因爲ListBoxItem的datacontext不是ListBox的datacontext,所以我將命令綁定到ListBoxItem的datacontext,然後通過messager通知列表框的datacontext。後來我會看到你的解決方案。 – SubmarineX 2013-11-18 11:47:22