C# WPF编程-命令

C# WPF编程-命令

概述

  • 使用路由事件可以响应广泛的鼠标和键盘事件,这些事件是低级的元素。在实际应用程序中,功能被划分成一些高级的任务。这些任务可通过各种不同的动作和用户界面元素触发,包括主菜单、上下文菜单、键盘快捷键以及工具栏。
  • 可在WPF中定义这些任务(也就是命令)并将控件连接到命令,从而不需要重复编写事件处理代码。更重要的是,当连接的命名不可用时,命令特性通过自动禁用控件来管理用户界面的状态。

将事件处理程序映射到事件:

将事件映射到命令:

WPF命令的缺点:

  • 命令跟踪(例如,保留最近命令的历史记录);
  • "可撤销的"命令;
  • 具有状态并可处于不同"模式"的命令(例如,可被打开或关闭的命令);

WPF命令模型

WPF命令模型有许多可变的部分组成。他们都具有如下4个重要元素:

  • 命令: 命令表示应用程序任务,并且跟踪任务是否能被执行。然然,命令实际上不包含执行应用程序任务的代码。
  • 命令绑定: 每个命令绑定针对用户界面的具体区域,将命令连接到相关的应用程序逻辑。
  • 命令源: 命令源触发命令。
  • 命令目标: 命令目标是在其中执行命令的元素。

ICommand接口

WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理。该接口包含两个方法和一个事件:

csharp 复制代码
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属性,该属性为命令显示的文本。
  • 为命令定义命令文本的优点是可在某个位置执行本地化。

命令库

相关推荐
必须会一定会23 分钟前
Agent Plugins 1.0实战:plugin.json、skills、mcp.json目录结构与迁移
开发语言·人工智能·ai编程
St_rive39 分钟前
Page Object设计模式
java·开发语言·设计模式
wp123_11 小时前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
wuyk5551 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
luj_17682 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
caimouse3 小时前
ReactOS 图形系统分析(16):字符串对象 — STROBJ(string.c)
c语言·开发语言
Aphelios3804 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~4 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
90后小陈老师5 小时前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php