Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 退出菜单项将永远禁用_Wpf_Caliburn.micro - Fatal编程技术网

Wpf 退出菜单项将永远禁用

Wpf 退出菜单项将永远禁用,wpf,caliburn.micro,Wpf,Caliburn.micro,我在WPF应用程序中有一个退出菜单项。当我将项目移到使用Caliburn Micro时,它在启动应用程序时已被禁用 <MenuItem Header="E_xit" InputGestureText="Alt+F4" Command="ApplicationCommands.Close"/> 我怀疑您没有设置应用程序命令。请关闭 若找不到CommandBinding,该命令将始终从CanExecute方法返回false。因此,要启用命令,您必须: 首先,在根元

我在WPF应用程序中有一个退出菜单项。当我将项目移到使用Caliburn Micro时,它在启动应用程序时已被禁用

<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.
}