【发布时间】:2010-10-05 15:50:37
【问题描述】:
WPF 中是否有 命令 可以从上下文菜单中关闭应用程序?也就是说,与右键单击任何窗口的标题栏获得的上下文菜单相同?
有很多标准命令,但我很难找到退出命令。
【问题讨论】:
WPF 中是否有 命令 可以从上下文菜单中关闭应用程序?也就是说,与右键单击任何窗口的标题栏获得的上下文菜单相同?
有很多标准命令,但我很难找到退出命令。
【问题讨论】:
不幸的是,这不存在。您必须实现自定义命令并调用
Application.Current.Shutdown();
【讨论】:
有一个ApplicationCommands.Close,但没有一个ApplicationCommands.Exit。
请参阅this thread(例如)以查找替代方法(例如创建自定义命令)。
【讨论】:
你的问题解决了。但以下代码可能对其他人有所帮助。
【讨论】:
实际上并没有那么复杂(但是,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"/>
干杯!
(你无法想象我自己花了多长时间才发现这个命令的东西......)
【讨论】:
MyCommands 类的竞争体:public static ICommand ApplicationCloseCommand { get; } = new ApplicationCloseCommand();