gpt4 book ai didi

WPF:MenuItem 内的按钮,关闭菜单

转载 作者:行者123 更新时间:2023-12-04 21:24:59 27 4
gpt4 key购买 nike

我在 MenuItem 的标题中有一个 Button。单击菜单项(不是 Button 部分)按预期关闭菜单,但单击 Button 不会关闭菜单,我希望它关闭。我怎样才能解决这个问题?
更多背景:
我有两个命令,它们是彼此的次要变体,我想将它们都放在一个菜单中。第一个变体将在大部分时间使用,所以我真的不希望两个菜单项都占用空间,也不想将它们都放在子菜单中。所以我想到了在 MenuItem 中为辅助命令放置一个 Button 的想法,如下所示:

<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>
看起来像这样:

(来源: excastle.com)
所以如果我点击按钮,我会得到第二个命令;但是如果我点击菜单项上的任何其他地方,我会得到主要命令。这在一定程度上很有效。
问题是,无论我是点击 MenuItem 还是 Button,我都做出了选择并且我希望菜单关闭——但是如果我点击按钮,它不会关闭菜单。菜单保持打开状态。在某些情况下,我可以看到这实际上是有用的行为(例如,放大/缩小您可能想要多次单击而无需在每次单击后关闭菜单的按钮,就像在 Google Chrome 的菜单中一样);但在这种情况下,我确实希望按钮关闭菜单。
如果有人对此感到疑惑 Focusable="False" ,删除它并不能解决问题,它只是更改它,以便第二次下拉菜单时 Button 用蓝色(聚焦)边框绘制。
我尝试使用超链接而不是按钮,效果相同:单击超链接不会关闭菜单。
如何让嵌入式按钮关闭菜单?

最佳答案

我刚刚为菜单项添加了 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;
}

如果您避免使用代码(像我一样),则可以为菜单项创建 Behavior。

关于WPF:MenuItem 内的按钮,关闭菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5204234/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com