C# WPF编程-命令
- 概述
- WPF命令模型
- ICommand接口
- RoutedCommand类
- RoutedUICommand类
- 命令库
概述
- 使用路由事件可以响应广泛的鼠标和键盘事件,这些事件是低级的元素。在实际应用程序中,功能被划分成一些高级的任务。这些任务可通过各种不同的动作和用户界面元素触发,包括主菜单、上下文菜单、键盘快捷键以及工具栏。
- 可在WPF中定义这些任务(也就是命令)并将控件连接到命令,从而不需要重复编写事件处理代码。更重要的是,当连接的命名不可用时,命令特性通过自动禁用控件来管理用户界面的状态。
将事件处理程序映射到事件:
将事件映射到命令:
WPF命令的缺点:
- 命令跟踪(例如,保留最近命令的历史记录);
- “可撤销的”命令;
- 具有状态并可处于不同“模式”的命令(例如,可被打开或关闭的命令);
WPF命令模型
WPF命令模型有许多可变的部分组成。他们都具有如下4个重要元素:
- 命令: 命令表示应用程序任务,并且跟踪任务是否能被执行。然然,命令实际上不包含执行应用程序任务的代码。
- 命令绑定: 每个命令绑定针对用户界面的具体区域,将命令连接到相关的应用程序逻辑。
- 命令源: 命令源触发命令。
- 命令目标: 命令目标是在其中执行命令的元素。
ICommand接口
WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理。该接口包含两个方法和一个事件:
public interface ICommand
{void Execute(object parameter);bool CanExecute(object parameter);event EventHandler CanExecuteChanged;
}
- Execute()方法将包含应用程序任务逻辑(例如,打印文档)。
- CanExecute()方法返回命令的状态,如果命令可用,返回true,否则返回false。
- CanExecuteChanged():当命令状态变化时引发该事件。
注:Execute()和CanExecute()方法都接受一个附加的参数对象。
RoutedCommand类
- 当创建自己的命令时,不会直接实现ICommand接口,而是使用System.Windows.Input.RoutedCommand类,该类自动实现了ICommand接口。RoutedCommand类是WPF中唯一实现了ICommand接口的类。
RoutedUICommand类
- 在程序中处理的大部分命令不是RoutedCommand对象,而是RoutedUICommand类的实例,RoutedUICommand类继承自RoutedCommand类。
- RoutedUICommand类用于具有文本的命令,这些文本显示在用户界面中的某些地方(如,菜单项文本、工具栏按钮的工具提示)。RoutedUICommand类只增加了Text属性,该属性为命令显示的文本。
- 为命令定义命令文本的优点是可在某个位置执行本地化。