Wpf 退出菜单项将永远禁用
我在WPF应用程序中有一个退出菜单项。当我将项目移到使用Caliburn Micro时,它在启动应用程序时已被禁用Wpf 退出菜单项将永远禁用,wpf,caliburn.micro,Wpf,Caliburn.micro,我在WPF应用程序中有一个退出菜单项。当我将项目移到使用Caliburn Micro时,它在启动应用程序时已被禁用 <MenuItem Header="E_xit" InputGestureText="Alt+F4" Command="ApplicationCommands.Close"/> 我怀疑您没有设置应用程序命令。请关闭 若找不到CommandBinding,该命令将始终从CanExecute方法返回false。因此,要启用命令,您必须: 首先,在根元
<MenuItem Header="E_xit" InputGestureText="Alt+F4"
Command="ApplicationCommands.Close"/>
我怀疑您没有设置
应用程序命令。请关闭
若找不到CommandBinding,该命令将始终从CanExecute方法返回false。因此,要启用命令,您必须:
- 首先,在根元素(可能在窗口)或需要处理此命令的任何父元素上创建CommandBinding
- 其次,在该命令绑定中提供
CanExecute
处理程序,并根据要启用此菜单项的条件将该处理程序中的e.CanExecute
设置为True
实现上述目标的小样本:
<TextBox>
<TextBox.CommandBindings>
<CommandBinding Command="ApplicationCommands.Close"
Executed="CommandBinding_Executed"
CanExecute="CommandBinding_CanExecute"/>
</TextBox.CommandBindings>
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header="E_xit" InputGestureText="Alt+F4"
Command="ApplicationCommands.Close"/>
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
在代码隐藏处理程序中:
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
}
private void CommandBinding_CanExecute(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = true; <-- Set this to true to enable bindings.
}
private void CommandBinding_已执行(对象发送方,已执行路由Eventargs e)
{
}
private void CommandBinding_CanExecute(对象发送方,
CanExecuteRoutedEvents参数(e)
{
e、 CanExecute=true;ApplicationCommand.Close
是一个内置的RoutedUICommand。请注意,它的示例不包括CommandBinding的任何实现?除非在vanilla WPF中使用Caliburn Micro?时需要实现该命令,否则exit命令会按预期退出应用程序。该示例不适用于Close-it代表粘贴,在那个例子中,文本框在有键盘焦点时处理粘贴。注意,它们确实处理CanExecute。@AquaGeneral-我认为CommandBinding不可能存在。您是否检查了我在回答中发布的第一个链接,以及AndrewS在评论中提到的在窗口中使用CommandBinding的链接?您我们都是对的!我从来没有质疑过Close命令是否可以自己执行任何操作。当我之前说它可以工作时,我为MenuItem提供了一个简单的事件处理程序。对我来说,一些最令人困惑的问题几乎总是由一些简单的事情引起的。
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
}
private void CommandBinding_CanExecute(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = true; <-- Set this to true to enable bindings.
}