WPF标准命令 - 哪里退出?

And*_*erd 20 wpf binding

我正在WPF应用程序中创建一个标准菜单.

我知道我可以创建自定义命令,但我知道还有一堆标准命令要绑定.

例如,要打开一个文件,我应该绑定到ApplicationCommands.Open,关闭一个文件,我应该绑定到ApplicationCommands.Close.还有大量的EditCommands,ComponentCommandsNavigationCommands.

似乎没有"退出"命令.我本来期望有ApplicationCommands.Exit.

我应该将什么绑定到"退出"菜单项?要为某些东西创建自定义命令,这个通用似乎是错误的.

dth*_*her 8

不幸的是,没有预定义的ApplicationCommands.Exit.2008年Microsoft Connect上建议在WPF中添加一个:http://connect.microsoft.com/VisualStudio/feedback/details/354300/add-predefined-wpf-command-applicationcommands-exit.但是,该项目已标记为已关闭/延期.

Mike Taulty 在他博客上的一篇文章中讨论了如何创建自己的Exit命令.


NoO*_*One 7

实际上并不复杂(但仍然,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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

你这样使用它:

<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/>
Run Code Online (Sandbox Code Playgroud)

干杯!

(你无法想象我自己发现这个命令的时间有多长......)


Tho*_*que 5

AFAIK 没有 ApplicationCommands.Quit 或 ApplicationCommands.Exit,所以我想你必须自己创建它......

无论如何,如果您使用的是MVVM 模式,RoutedCommands 不是很方便,所以最好使用轻量级替代品,如RelayCommandDelegateCommand