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

Windows 功能区框架使用基于可扩展应用程序标记语言的标记语言 (XAML) 以声明方式实现功能区应用程序的外观。

将演示文稿与命令逻辑分离

在功能区框架中,演示和视觉属性与命令逻辑的分离是通过两个不同但依赖的开发平台来实现的。 控件布局、缩放行为、命令声明和资源规范是基于 可扩展应用程序标记语言 (XAML) 规范的声明性标记语法的设计时域。 低级别功能、应用程序挂钩和命令处理程序在组件对象模型 (COM) 的接口实现中定义。

这种表示形式和逻辑的分离具有以下优势:

  • 更高效的应用程序开发周期,使 UI 开发人员和设计人员能够独立于核心应用程序功能实现功能区应用程序的 GUI。 此核心功能可以留给专门的软件开发人员。
  • 维护成本更低,因为无需更改核心功能即可更改 GUI (,反之亦然) 。
  • 通过标记简单规范字符串和图像资源。
  • 易于制作原型。

标记结构

功能区框架标记的结构中存在两个不同的分支。

第一个分支包含命令和资源声明的清单, (字符串和图像) 。 框架使用每个命令条目通过命令 ID 将功能区控件绑定到应用程序代码中定义的命令处理程序。

第二个分支包含实际控件声明。 每个控件都通过映射到每个 Command 声明中指定的 Name 属性的 CommandName 属性与 Command 相关联。

功能区组件

功能区框架 UI 功能通过 视图公开。 视图本质上是一个容器,例如 功能区和ContextPopup,用于显示框架控件及其绑定到的命令。

功能区视图由多个组件组成,其中包括应用程序菜单快速访问工具栏 (QAT) ,用于显示功能区 UI 中的常用命令、包含控件组的核心和上下文选项卡以及 ContextPopup 的丰富上下文菜单系统。

所有功能区组件都声明在独立标记文件中,可:

以下两个功能区标记示例演示了一组功能区应用程序菜单项如何分别与命令名称和 ID 相关联。

  1. 本部分显示应用程序菜单所需的命令声明,其中包含基本命令,例如“新建”、“打开”和“保存”。

    <!-- Command declarations for the Application Menu. -->
    <Command Name="cmdFileMenu"
             Symbol="ID_FILE_MENU"
             Id="25000" />
    <!-- Command declaration for most recently used items. -->
    <Command Name="cmdMRUItems"
             Symbol="ID_FILE_MRUITEMS"
             Id="25050"/>
    <!-- Command declarations for Application Menu items. -->
    <Command Name="cmdNew"
             Symbol="ID_FILE_NEW"
             Comment="New"
             Id="25001"
             LabelTitle="&amp;New"/>
    <Command Name="cmdOpen"
             Symbol="ID_FILE_OPEN"
             Comment="Open"
             Id="25002"
             LabelTitle="&amp;&amp;Open"/>
    <Command>
      <Command.Name>cmdSave</Command.Name>
      <Command.Symbol>ID_FILE_SAVE</Command.Symbol>
      <Command.Comment>Save</Command.Comment>
      <Command.Id>25003</Command.Id>
      <Command.LabelTitle>
        <String>
          <String.Content>Label for Save</String.Content>
          <String.Id>59999</String.Id>
          <String.Symbol>strSave</String.Symbol>
        </String>
      </Command.LabelTitle>
      <Command.TooltipTitle>Tooltip title with &amp;&amp; for Save Command</Command.TooltipTitle>
      <Command.TooltipDescription>Tooltip description for Save Command.</Command.TooltipDescription>
      <Command.Keytip>s1</Command.Keytip>
    </Command>
    <Command Name="cmdPrint"
             Symbol="ID_FILE_PRINT"
             Comment="Save"
             Id="25004"
             LabelTitle="Print" />
    <Command Name="cmdExit"
             Symbol="ID_FILE_EXIT"
             Comment="Exit"
             Id="25005"
             LabelTitle="Exit" />
    
  2. 本部分显示关联的 Control 声明。

    <!-- Control declarations for Application Menu items. -->
    <Ribbon.ApplicationMenu>
      <ApplicationMenu CommandName="cmdFileMenu">
        <!-- Most recently used items collection. -->
        <ApplicationMenu.RecentItems>
          <RecentItems CommandName="cmdMRUItems"/>
        </ApplicationMenu.RecentItems>
        <!-- Menu items collection. -->
        <MenuGroup>
          <Button CommandName="cmdNew" />
          <Button CommandName="cmdOpen" />
          <Button CommandName="cmdSave" />
        </MenuGroup>
        <MenuGroup>
          <Button CommandName="cmdPrint" />
          <Button CommandName="cmdExit" />
        </MenuGroup>
      </ApplicationMenu>
    </Ribbon.ApplicationMenu>
    

使用 UI 命令编译器 (UICC) 工具编译标记时,命令名称和 ID 将放入功能区主机应用程序使用的头文件中。

下面是 UICC 生成的头文件的示例。

// *****************************************************************************
// * This is an automatically generated header file for UI Element definition  *
// * resource symbols and values. Please do not modify manually.               *
// *****************************************************************************

#pragma once

#define cmdFileMenu 25000 
#define cmdNew 22001  /* New */ 
#define cmdNew_LabelTitle_RESID 60005
#define cmdOpen 22002  /* Open */ 
#define cmdOpen_LabelTitle_RESID 60006
#define cmdSave 22003  /* Save */ 
#define cmdSave_LabelTitle_RESID 60007
#define cmdSave_TooltipTitle_RESID 60008
#define cmdSave_TooltipDescription_RESID 60009

可扩展应用程序标记语言 (XAML)

编译功能区标记