一个非常简单直接的例子。
我有一个窗户。它设置了 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:事实证明它并没有那么糟糕。命令不仅在用户第一次打开菜单时绑定。如果它关闭并重新打开一切都很好。尽管如此,这似乎是不可取的,而且是一种非常奇怪的行为。