一个非常简单和直接的例子。
我有一个窗口。它设置了CommandBindings,以捕获RoutedUICommand的执行。
<Window
...
>
<Window.CommandBinding>
<CommandBinding
Command="{x:Static local:Commands.Command1}"
Executed="OnCommand1Executed"
CanExecute="OnCanCommand1Execute"
/>
</Window.CommandBinding>
</Window>
窗口中托管了一个UserControl,在其中声明了一个ContextMenu。ContextMenu的一个项将Command属性分配给相同的RoutedUICommand。
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.Command1}" />
</ContextMenu>
但是菜单项仍然无法使用(==禁用)。某种方式下命令执行不会传递到窗口。也许是因为ContextMenu在弹出窗口内部?
如果我将所需的CommandBinding添加到ContextMenu.CommandBindings集合中,则一切正常。但这是一个糟糕的选择,因为没有单个“全局”CommandBinding的位置。
如何以最佳方式解决问题?
更新:事实证明情况并不那么糟糕。只有在用户第一次打开菜单时才会绑定命令。如果关闭并重新打开,则一切正常。尽管如此,这似乎并不理想,是一种相当奇怪的行为。