了解命令和控件

逻辑与呈现的分离是启发 Windows 功能区框架的命令表示系统的设计理念,该系统基于设计模式,其中功能和行为独立于公开此功能的控件实现。

简介

本文讨论功能区框架命令系统的设计。 本文介绍命令和控件的概念,并探讨了它们如何协同工作,通过大量新的 UI 功能提供丰富的命令体验。

Windows 功能区命令系统

在功能区框架中,命令和控件是独立的实体。 命令是一种抽象结构,没有表示特定任务或功能类的表示约束。 另一方面,控件是通过功能区 UI 公开命令功能的具体对象。

这种区别提供了定义命令的功能,这些命令没有 UI 详细信息,并且能够根据操作的意图执行,而无需管理操作的调用方式。

控件

控件是命令呈现所需的 UI 对象。 框架根据用户交互和一组固有属性和行为在运行时呈现和管理它们。

称为自适应布局的 UI 框架管理灵活性是功能区的强大优势之一。 功能区控件可以通过依赖框架或开发人员定义的布局模板自动重新配置自身,这些模板能够响应各种运行时要求,所有这些要求都无需编写一行演示代码。 有关详细信息,请参阅 通过大小定义和缩放策略自定义功能区

除了自适应布局的优点外,许多复杂的功能区控件为特定的 UI 问题空间提供独立解决方案。 通过提供复杂的交互模型,功能区控件(如 FontControl 或 ColorPicker)提供通过实际字体或颜色属性的属性包(而不是通过标准 Windows 控件的各种子控件、枚举和索引值)以更抽象的术语操作数据的功能。

命令

命令实现与公开其功能的功能区控件松散耦合,是主机应用程序的域,采用事件侦听器、命令处理程序和各种 Command 属性的形式。

命令在具有唯一 ID 的功能区标记中声明,或在编译时分配标记编译器生成的 ID。 命令通过命令名称与控件关联,但与控件不同,其实际功能是在代码中定义的,其中它们通过命令 ID 绑定到特定的命令处理程序。

注意

在编译时,此 ID 存储在 ID 定义头文件中,该文件向功能区主机应用程序中的相应命令处理程序公开命令。

 

每个命令都有一个在 UI_COMMANDTYPE 枚举中逐项列出的基础命令类型。

操作中的命令体验

此功能区快速访问工具栏 (QAT) 演示了此命令模型的功能。 QAT 为最终用户提供了一种为功能区 UI 中几乎任何控件轻松定义自己的快捷方式的方法。 当用户右键单击功能区控件并从上下文菜单中选择“ 添加到快速访问工具栏” 时,将在运行时动态地将快捷方式添加到 QAT。

下图显示了 Windows 7 画图功能区中由 SplitButton 控件表示的“从命令粘贴”和“粘贴”。

microsoft paint 功能区中粘贴拆分按钮的图片。

下图显示了 Windows 7 画图功能区 QAT 中的相同 “粘贴 ”和“ 从命令粘贴 ”,仍由 SplitButton 控件表示。

microsoft paint qat 中粘贴拆分按钮的图片。

当控件由 QAT 承载时,控件的新实例将维护原始控件的所有功能,而无需其他事件侦听器和命令处理程序来支持它。 这两个控件通过共享的命令标识符绑定到同一功能区命令处理程序。 这样,无论调用哪个控件,框架都将这两个控件视为一个。

注意

在设计时将命令合并到 ContextPopup 中时,也实现了相同的优势。 在这种情况下,无论 SplitButton 控件出现在功能区、QAT 还是 ContextPopup 中,都可以使用粘贴命令处理程序。

 

Windows 功能区框架简介

创建功能区应用程序

使用功能区标记声明命令和控件