【问题标题】:How to close WPF application from context menu?如何从上下文菜单中关闭 WPF 应用程序?
【发布时间】:2010-10-05 15:50:37
【问题描述】:

WPF 中是否有 命令 可以从上下文菜单中关闭应用程序?也就是说,与右键单击任何窗口的标题栏获得的上下文菜单相同?

有很多标准命令,但我很难找到退出命令

【问题讨论】:

    标签: wpf command


    【解决方案1】:

    不幸的是,这不存在。您必须实现自定义命令并调用

    Application.Current.Shutdown();
    

    【讨论】:

    • 可能是Application.Current.Shutdown();作为 Application.Current.Exit();是一个事件。
    【解决方案2】:

    有一个ApplicationCommands.Close,但没有一个ApplicationCommands.Exit。

    请参阅this thread(例如)以查找替代方法(例如创建自定义命令)。

    【讨论】:

      【解决方案3】:

      你的问题解决了。但以下代码可能对其他人有所帮助。

      Environment.Exit(0)

      【讨论】:

      • 我认为应该改用 Application.Current.Shutdown。 IIRC,Env.Exit 是一个相当严厉的动作,相当于直接杀死进程。但我可能明显错了。不幸的是,我手头没有反射器来验证它。
      • Yes Environment.Exit(0) 是关闭应用程序的一种非常残酷的方式。它释放您应用程序的所有资源并返回操作系统环境。
      【解决方案4】:

      实际上并没有那么复杂(但是,M$ 仍然因为不提供它而糟透了)。给你:

      public static class MyCommands
      {
          private static readonly ICommand appCloseCmd = new ApplicationCloseCommand();
          public static ICommand ApplicationCloseCommand
          {
              get { return appCloseCmd; }
          }
      }
      
      //===================================================================================================
      public class ApplicationCloseCommand : ICommand
      {
          public event EventHandler CanExecuteChanged
          {
              // You may not need a body here at all...
              add { CommandManager.RequerySuggested += value; }
              remove { CommandManager.RequerySuggested -= value; }
          }
      
          public bool CanExecute(object parameter)
          {
              return Application.Current != null && Application.Current.MainWindow != null;
          }
      
          public void Execute(object parameter)
          {
              Application.Current.MainWindow.Close();
          }
      }
      

      甚至可能不需要AplicationCloseCommand.CanExecuteChanged 事件处理程序的主体。

      你这样使用它:

      <MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/>
      

      干杯!

      (你无法想象我自己花了多长时间才发现这个命令的东西......)

      【讨论】:

      • 小技巧 resharper 告诉我:我的 MyCommands 类的竞争体:public static ICommand ApplicationCloseCommand { get; } = new ApplicationCloseCommand();
      • @OlleKelderman 是的。这是 C# 版本 6 语法。这个答案早于它。 :)
      • 我知道,对任何通过搜索引擎在这里的人仍然有用:)
      猜你喜欢
      • 1970-01-01
      • 2016-02-15
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多