2010-12-11 62 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