gpt4 book ai didi

wpf - 在单击任何按钮之前,将禁用上下文菜单中的WPF自定义命令

转载 作者:行者123 更新时间:2023-12-03 13:21:48 27 4
gpt4 key购买 nike

我有一个自定义命令,我尝试从上下文菜单中执行它们,但是除非我单击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;
}

最佳答案

现在完全不同的轨道:
实际上,将ContextMenu作为命令的载体有一些特殊之处:
菜单不被视为窗口的一部分,因此其行为不像其可视树中的元素那样。

这里定义了针对您的问题的不同解决方案:
http://www.wpftutorial.net/RoutedCommandsInContextMenu.html

最简单的方法似乎是将其添加到您的XAML中(对于窗口):

FocusManager.FocusedElement="{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}"

关于wpf - 在单击任何按钮之前,将禁用上下文菜单中的WPF自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921712/

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