【发布时间】:2011-04-24 17:12:19
【问题描述】:
我有一个自定义命令,我尝试从上下文菜单中执行它们,但它们始终显示为禁用,除非我单击 UI 上的任何按钮(按钮与命令没有任何关系)。
单击按钮后,命令开始正确显示(当它们不可用时,它们会被禁用并在可用时启用)。
编辑:事实证明,使命令正常工作的不是按钮单击,而是按钮或其他焦点控件(例如,如果我进入控件,这也会启用我的命令)。
这里是命令代码:
<Window.InputBindings>
<KeyBinding Command="{x:Static local:MainWindow.Quit}" Key="Q" Modifiers="Ctrl"/>
<KeyBinding Command="{x:Static local:MainWindow.Disconnect}" Key="D" Modifiers="Ctrl"/>
</Window.InputBindings>
<Window.ContextMenu>
<ContextMenu Opacity="95">
<MenuItem Header="Quit Application Ctrl + Q" Command="{x:Static local:MainWindow.Quit}"/>
<MenuItem Header="Disconnect from the pump Ctrl + D" Command="{x:Static local:MainWindow.Disconnect}"/>
</ContextMenu>
</Window.ContextMenu>
这里是 CanExecuteMethod 的命令:
public static RoutedCommand Quit = new RoutedCommand();
private void QuitCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
e.Handled = true;
}
【问题讨论】:
-
对于其他人(比如我)在尝试确定为什么在没有键盘焦点时(可能使用
Keyboard.ClearFocus())时他们的菜单项被禁用的原因,您可以通过设置您的窗口具有键盘焦点。我用Keyboard.Focus(this)。