我正在WPF应用程序中创建一个标准菜单.
我知道我可以创建自定义命令,但我知道还有一堆标准命令要绑定.
例如,要打开一个文件,我应该绑定到ApplicationCommands.Open,关闭一个文件,我应该绑定到ApplicationCommands.Close.还有大量的EditCommands,ComponentCommands或NavigationCommands.
似乎没有"退出"命令.我本来期望有ApplicationCommands.Exit.
我应该将什么绑定到"退出"菜单项?要为某些东西创建自定义命令,这个通用似乎是错误的.
不幸的是,没有预定义的ApplicationCommands.Exit.2008年Microsoft Connect上建议在WPF中添加一个:http://connect.microsoft.com/VisualStudio/feedback/details/354300/add-predefined-wpf-command-applicationcommands-exit.但是,该项目已标记为已关闭/延期.
Mike Taulty 在他博客上的一篇文章中讨论了如何创建自己的Exit命令.
实际上并不复杂(但仍然,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)
干杯!
(你无法想象我自己发现这个命令的时间有多长......)
AFAIK 没有 ApplicationCommands.Quit 或 ApplicationCommands.Exit,所以我想你必须自己创建它......
无论如何,如果您使用的是MVVM 模式,RoutedCommands 不是很方便,所以最好使用轻量级替代品,如RelayCommand或DelegateCommand。
| 归档时间: |
|
| 查看次数: |
19504 次 |
| 最近记录: |