功能区 XML

通过“功能区(XML)”项,可以使用 XML 自定义功能区。 如果要以功能区(可视化设计器)项不支持的方式自定义功能区,请使用功能区 (XML) 项。 有关每个项目可执行操作的比较,请参阅功能区概述

适用于: 本主题中的信息适用于以下应用程序的文档级项目和 VSTO 外接程序项目:Excel、InfoPath 2013 和 InfoPath 2010、Outlook、PowerPoint、Project、Visio、Word。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能

向项目添加功能区 (XML) 项

可以从“添加新项”对话框将功能区(XML)项添加到任何 Office 项目。 Visual Studio 会自动将以下文件添加到项目中:

  • 功能区 XML 文件。 此文件定义功能区用户界面(UI)。 使用此文件可添加 UI 元素,如选项卡、组和控件。 有关详细信息,请参阅本主题后面的 Ribbon XML 文件参考

  • 功能区代码文件。 此文件包含 Ribbon 类。 此类具有您在“添加新项”对话框中为Ribbon(XML)项指定的名称。 Microsoft Office 应用程序使用此类的实例来加载自定义功能区。 有关详细信息,请参阅本主题后面的Ribbon 类参考

    默认情况下,这些文件将自定义组添加到功能区中的 “加载项 ”选项卡。

在 Microsoft Office 应用程序中显示自定义功能区

向项目中添加功能区(XML)项后,必须向ThisAddinThisWorkbookThisDocument类中添加代码,该代码会重写CreateRibbonExtensibilityObject方法,并将该功能区 XML 类返回给 Office 应用程序。

下面的代码示例重写了CreateRibbonExtensibilityObject方法,并返回一个名为 MyRibbon 的 Ribbon XML 类。

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    return new MyRibbon();
}

定义自定义功能区的行为

可以通过创建 回调方法 来响应用户操作,例如单击功能区上的按钮。 回调方法类似于 Windows 窗体控件中的事件,但它们由 UI 元素的 XML 中的属性标识。 在 Ribbon 类中编写方法,控件调用与属性值同名的方法。 例如,可以创建在用户单击功能区上的按钮时调用的回调方法。 创建回调方法需要执行两个步骤:

  • 将一个属性分配给功能区 XML 文件中的控件,以标识代码中的回调方法。

  • 在 Ribbon 类中定义回调方法。

注释

Outlook 需要其他步骤。 有关详细信息,请参阅 自定义 Outlook 的功能区

有关演示如何从功能区自动执行应用程序的演练,请参阅 演练:使用功能区 XML 创建自定义选项卡

将回调方法分配给控件

若要将回调方法分配给功能区 XML 文件中的控件,请添加一个属性,该属性指定回调方法的类型和方法的名称。 例如,以下元素定义名为 onAction 回调方法 OnToggleButton1的切换按钮。

<toggleButton id="toggleButton1" onAction="OnToggleButton1" />

当用户执行与特定控件关联的主任务时,将调用 onAction。 例如,当用户单击该按钮时,将调用切换按钮的 onAction 回调方法。

在特性中指定的方法可以具有任何名称。 但是,它必须与在功能区代码文件中定义的方法的名称匹配。

可以向功能区控件分配许多不同类型的回调方法。 有关可用于每个控件的回调方法的完整列表,请参阅面向开发人员的 Office(2007) 功能区用户界面的技术文章(第 3 部分(共 3 部分)。

定义回调方法

在功能区代码文件中,定义功能区类中的回调方法。 回调方法有几个要求:

  • 它必须声明为公共。

  • 其名称必须与分配给 Ribbon XML 文件中控件回调函数的名称匹配。

  • 其签名必须与可用于关联功能区控件的回调方法类型的签名相匹配。

    有关功能区控件回调方法签名完整列表的详细信息,请参阅技术文章 “Office(2007)功能区用户界面的定制指南:面向开发人员(第 3 部分)”。 Visual Studio 不提供对在功能区代码文件中创建的回调方法的 IntelliSense 支持。 如果创建与有效签名不匹配的回调方法,代码将编译,但在用户单击该控件时不会发生任何作。

    所有回调方法都有一个 IRibbonControl 参数,该参数表示调用该方法的控件。 可以使用此参数对多个控件重复使用相同的回调方法。 下面的代码示例演示了 一个 onAction 回调方法,该方法根据用户单击的控件执行不同的任务。

    public void OnActionCallback(Office.IRibbonControl control, bool isPressed)
    {
        if (control.Id == "checkBox1")
        {
            MessageBox.Show("You clicked " + control.Id);
        }
        else
        {
            MessageBox.Show("You clicked a different control.");
        }
    }
    

功能区 XML 文件参考

可以通过向功能区 XML 文件添加元素和属性来定义自定义功能区。 默认情况下,功能区 XML 文件包含以下 XML。

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group id="MyGroup"
               label="My Group">
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

下表描述了功能区 XML 文件中的默认元素。

元素 Description
customUI 表示 VSTO 外接程序项目中的自定义功能区。
丝带 表示功能区。
tabs 表示一组功能区选项卡。
标签 表示单个 Ribbon 选项卡。
group 表示功能区选项卡上的一组控件。

这些元素具有用于指定自定义功能区外观和行为的属性。 下表描述了功能区 XML 文件中的默认属性。

Attribute Parent 元素 Description
onLoad customUI 标识应用程序加载功能区时调用的方法。
idMso 标签 识别要在功能区中显示的内置选项卡。
id group 标识该组。
label group 指定在组上显示的文本。

功能区 XML 文件中的默认元素和属性是可用的元素和属性的一小部分。 有关可用元素和属性的完整列表,请参阅面向 开发人员的 Office(2007) 功能区用户界面(第 2 部分 3)的技术文章。

Ribbon类参考

Visual Studio 在功能区代码文件中生成功能区类。 将功能区控件的回调方法添加到这个类中。 此类实现 IRibbonExtensibility 接口。

下表描述了此类中的默认方法。

方法 Description
GetCustomUI 返回功能区 XML 文件的内容。 Microsoft Office 应用程序调用此方法以获取定义自定义功能区用户界面的 XML 字符串。 此方法实现 GetCustomUI 该方法。 注意:GetCustomUI 应仅实现以返回功能区 XML 文件的内容;它不应用于初始化 VSTO 外接程序。 具体而言,不应尝试在 GetCustomUI 实现中显示对话框或其他窗口。 否则,自定义功能区可能无法正常运行。 如果必须运行初始化 VSTO 外接程序的代码,请将代码添加到 ThisAddIn_Startup 事件处理程序。
OnLoad IRibbonControl 参数分配给 Ribbon 字段。 Microsoft Office 应用程序加载自定义功能区时调用此方法。 可以使用此字段动态更新自定义功能区。 有关详细信息,请参阅面向开发人员的技术文章自定义 Office(2007) 功能区用户界面(第 1 部分(共 3 部分)。
GetResourceText 通过方法GetCustomUI调用以获取功能区 XML 文件的内容。