WPF:菜单项内的按钮,关闭菜单
我在菜单项标题中有一个按钮。单击菜单项(不是按钮部分)会按预期关闭菜单,但单击按钮不会关闭菜单,我希望它关闭。我怎样才能解决这个问题 更多背景: 我有两个互为次要变体的命令,我想将它们都放在菜单中。第一个变体大部分时间都会使用,因此我不希望两个菜单项都占用空间,也不希望将它们都放在子菜单中。所以我想到了在菜单项中放置一个辅助命令按钮的想法,如下所示:WPF:菜单项内的按钮,关闭菜单,wpf,menu,Wpf,Menu,我在菜单项标题中有一个按钮。单击菜单项(不是按钮部分)会按预期关闭菜单,但单击按钮不会关闭菜单,我希望它关闭。我怎样才能解决这个问题 更多背景: 我有两个互为次要变体的命令,我想将它们都放在菜单中。第一个变体大部分时间都会使用,因此我不希望两个菜单项都占用空间,也不希望将它们都放在子菜单中。所以我想到了在菜单项中放置一个辅助命令按钮的想法,如下所示: <Menu> <MenuItem Header="Git"> <MenuItem C
<Menu>
<MenuItem Header="Git">
<MenuItem Command="{Binding PrimaryCommand}">
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Text="Rebase "/>
<Button Content="Interactive" Focusable="False"
Command="{Binding SecondaryCommand}"/>
</StackPanel>
</MenuItem.Header>
</MenuItem>
</MenuItem>
</Menu>
看起来是这样的:
(来源:) 因此,如果我点击按钮,我将获得第二个命令;但是如果我单击菜单项上的其他任何地方,我将获得主命令。在某种程度上,这很有效 问题是,无论我是单击菜单项还是按钮,我已经做出选择,我希望菜单关闭——但如果我单击按钮,它不会关闭菜单。菜单一直开着。我可以看到,在某些情况下,这实际上是一种有用的行为(例如,放大/缩小按钮,您可能希望在每次单击后都单击多次而不关闭菜单,如在Google Chrome的菜单中);但在这种情况下,我确实希望按钮关闭菜单 如果有人想知道这一点,删除它并不能解决问题,只需更改它,使按钮在您第二次下拉菜单时以蓝色(聚焦)边框绘制 我尝试使用超链接而不是按钮,效果相同:单击超链接不会关闭菜单
如何获得嵌入式按钮来关闭菜单?我刚刚为菜单项添加了PreviewMouseUp事件处理程序,并在处理程序中关闭发送方父项的子菜单:
<MenuItem Command="{Binding PrimaryCommand}"
PreviewMouseUp="MenuItem_PreviewMouseUp">
...
</MenuItem>
private void MenuItem_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
// add checks of null value by yourself
((MenuItem)((MenuItem)sender).Parent).IsSubmenuOpen = false;
}
...
private void MenuItem_PreviewMouseUp(对象发送器,鼠标按钮Ventargs e)
{
//自己添加空值检查
((MenuItem)((MenuItem)发件人).Parent.IsSubmenuOpen=false;
}
若你们正在避免代码隐藏(像我一样),那个么你们可以为菜单项创建行为 下面是一个类似问题的答案: