【问题标题】:C#: Listbox Contextmenu for Listboxitems (WPF)C#:Listboxitems (WPF) 的列表框上下文菜单
【发布时间】:2010-12-11 19:52:54
【问题描述】:

我希望 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>

但它也没有用。

谁能给我一个提示/工作示例:)?

谢谢

【问题讨论】:

  • 究竟是什么不起作用?您需要更具体...您是否检查了 VS 中的输出窗口是否存在绑定错误?

标签: c# wpf listbox contextmenu listboxitem


【解决方案1】:

我会将ContextMenu 设置为ListBoxItem 的样式,而不是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>

【讨论】:

  • @Thomas,我在 MenuItem 中将命令与 RelayCommand 绑定,但从未调用过 RalayCommand。
  • @SubmarineX,你能在输出窗口中看到任何绑定错误吗?如果您看到类似“找不到管理 FrameworkElement...”的内容,请查看 this solution
  • @ThomasLevesque 谢谢你,现在我明白了。因为ListBoxItem的datacontext不是ListBox的datacontext,所以我把命令绑定到ListBoxItem的datacontext,然后通过messager通知listbox的datacontext。稍后我会看到你的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多