一个非常简单明了的例子。
我有一扇窗户。它设置了 CommandBindings 以捕获 RoutedUICommand 执行。
<Window
...
>
<Window.CommandBinding>
<CommandBinding
Command="{x:Static local:Commands.Command1}"
Executed="OnCommand1Executed"
CanExecute="OnCanCommand1Execute"
/>
</Window.CommandBinding>
</Window>
窗口中托管有一个 UserControl,其中声明了一个 ContextMenu。 ContextMenu 项具有分配给同一 RoutedUICommand 的 Command 属性。
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.Command1}" />
</ContextMenu>
但菜单项仍然处于非活动状态(==禁用)。不知何故,命令执行不会进入窗口。也许是因为 ContextMenu 位于弹出窗口内?
如果我将所需的 CommandBinding 添加到 ContextMenu.CommandBindings 集合中,一切都会正常工作。但这是一个糟糕的选择,因为没有地方容纳单个“全局”CommandBinding。
我怎样才能以最好的方式解决问题?
UPD:事实证明,情况并没有那么糟糕。命令未绑定仅在第一次用户打开菜单。如果关闭并重新打开一切都很好。尽管如此,这似乎并不可取,而且是一种相当奇怪的行为。
如果添加 Focus(); 还会出现这种情况吗?就在InitializeComponent()之后;在Windows构造函数中?
听起来 WPF 在从上下文菜单中查找可视化树时遇到问题。将焦点设置到主窗口可能会修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)