[英]Menu item won't show context menu
I have a button that when clicked, displays a ContextMenu. 我有一个按钮,单击该按钮时会显示一个ContextMenu。 In this ContextMenu, I have MenuItems.
在此ContextMenu中,我具有MenuItems。 If the MenuItem is left clicked, it should execute a command.
如果左击MenuItem,则应执行命令。 All this behavior works properly as of now with the following code:
到目前为止,所有这些行为都可以通过以下代码正常运行:
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding StartContextMenuCommand}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
</Style>
</ContextMenu.ItemContainerStyle>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.1}"/>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.2}"/>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.3}"/>
<MenuItem Header="{x:Static Name:ContextMenuStartNames.4}"/>
</ContextMenu>
</Button.ContextMenu>
Now I want each menu item to have a context menu with one MenuItem. 现在,我希望每个菜单项都有一个带有一个MenuItem的上下文菜单。 Since left clicking invokes a Command on a MenuItem, I want the right click behavior to display the following ContextMenu:
由于左键单击会在MenuItem上调用命令,因此我希望右键单击行为显示以下ContextMenu:
<ContextMenu>
<MenuItem Header="Set Default"></MenuItem>
</ContextMenu>
I tried putting this as a setter in the ItemContainerStyle. 我尝试将其作为设置器放置在ItemContainerStyle中。 I also tried putting it as a ContextMenu of a MenuItem, but neither of my attempts, among others have worked.
我也尝试将其作为MenuItem的ContextMenu,但是我的任何尝试均无济于事。 I'm sure I could come up with a hacky way to do this, but I want to keep it clean and simple.
我敢肯定,我可以想出一种简单的方法来做到这一点,但我想保持它简洁明了。
Maybe i do not understand your question (my english is not... anything special):D But this should work if you just want multilevel contextmenu: 也许我听不懂您的问题(我的英语不是……什么特别的东西):D但这如果您只想要多级上下文菜单应该可以工作:
<ContextMenu>
<MenuItem Header="Top Level 1">
<MenuItem Header="Sub Level" />
<MenuItem Header="Sub Level" />
</MenuItem>
<MenuItem Header="Top Level 2">
<MenuItem Header="Sub Level" />
<MenuItem Header="Sub Level" />
</MenuItem>
</ContextMenu>
Here's my current fix to this issue, but I don't like it at all. 这是我当前对这个问题的解决方法,但我一点都不喜欢。 I would like to avoid code behind as much as possible.
我想尽可能避免代码落后。
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding StartCommand}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu StaysOpen="True">
<MenuItem Header="Set As Default"/>
</ContextMenu>
</Setter.Value>
</Setter>
<EventSetter Event="PreviewMouseRightButtonUp" Handler="MenuItem_Click"/>
</Style>
</ContextMenu.ItemContainerStyle>
And the code behind: 以及后面的代码:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
ButtonContextMenu.StaysOpen = true;
(sender as MenuItem).ContextMenu.IsOpen = true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.