功能区概述

2007 Microsoft Office system 引入了一种称为“功能区”的用户界面 (UI) 元素。 可以通过功能区组织相关的命令,使这些命令更加易于查找。 命令显示为功能区上的控件。 控件沿应用程序窗口上边缘的水平条形区组织成组。 相关的组在选项卡上进行组织。

在早期版本的 Microsoft Office system 中使用菜单和工具栏访问的大多数功能现在都可以使用功能区访问。 有关更多信息,请参见技术文章 Developer Overview of the User Interface for the 2007 Microsoft Office System(2007 Microsoft Office System 用户界面开发人员概述)。

**适用于:**本主题中的信息适用于以下应用程序的文档级项目和应用程序级项目:Excel 2007 和 Excel 2010;InfoPath 2010;Outlook 2007 和 Outlook 2010;PowerPoint 2007 和 PowerPoint 2010;Project 2010;Visio 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

自定义 Microsoft Office 功能区

若要自定义功能区,请将下列功能区项之一添加到 Office 项目中:

  • 功能区(可视化设计器)

  • 功能区(XML)

例如,若要自定义 Excel 功能区,请将一个功能区项添加到 Excel 外接程序项目。

功能区(可视化设计器)项

**“功能区(可视化设计器)”项提供了高级工具,使用这些工具可以更容易地设计和开发自定义功能区。 可通过以下方式来使用“功能区(可视化设计器)”**项自定义功能区:

  • 将自定义或内置选项卡添加到功能区。

  • 将自定义组添加到自定义或内置选项卡。

    提示

    内置选项卡或组是 Microsoft Office 应用程序的功能区上已存在的选项卡或组。 例如,“数据”选项卡是 Excel 中的内置选项卡。 “连接”组是“数据”选项卡上的内置组。

  • 将自定义控件添加到自定义组。

  • 将自定义控件添加到 Microsoft Office 菜单。

有关如何使用**“功能区(可视化设计器)”**项自定义功能区的更多信息,请参见功能区设计器

功能区 (XML) 项

如果您希望通过**“功能区(可视化设计器)”项不支持的方式来自定义功能区,则可以使用“功能区(XML)”项。 可通过以下方式来使用“功能区(XML)”**项自定义功能区:

  • 将内置组添加到自定义选项卡或内置选项卡。

  • 将内置控件添加到自定义组。

  • 添加自定义代码以重写内置控件的事件处理程序。

  • 自定义快速访问工具栏。

  • 使用限定 ID 在外接程序之间共享功能区自定义项。

有关如何使用**“功能区(XML)”**项自定义功能区的更多信息,请参见功能区 XML

将功能区从功能区设计器导出到功能区 XML

如果您使用功能区设计器创建一个功能区,然后决定要通过**“功能区(可视化设计器)”**项不支持的方式来自定义功能区,则可以将该功能区导出到 XML。

Visual Studio 会自动创建一个**“功能区(XML)”**项,并使用该功能区上的每个控件的元素和特性来填充功能区 XML 文件。

并非功能区设计器的**“属性”窗口中的所有属性都被传输到功能区 XML 文件。 例如,Visual Studio 不会导出“图像”“文本”**属性的值。 这是因为您必须在导出项目的功能区代码文件中创建回调方法,以分配图像或设置控件的文本。 Visual Studio 不会在导出过程中自动生成回调方法。

此外,任何未更改的默认属性值都不会出现在生成的功能区 XML 文件中。

有关如何将功能区导出到 XML 的更多信息,请参见如何:将功能区从功能区设计器导出为功能区 XML

更新代码

新的功能区代码文件将被添加到**“解决方案资源管理器”**中。 此文件包含功能区 XML 类。 必须在此类的 Ribbon Callbacks 区域中创建回调方法以处理用户操作(如单击按钮的操作)。 请将代码从事件处理程序移动至这些回调方法,并修改这些代码以使用可扩展功能区 (RibbonX) 编程模型。 有关更多信息,请参见功能区 XML

您还必须向 ThisAddIn、ThisWorkbook 或 ThisDocument 类添加代码,以便重写 CreateRibbonExtensibilityObject 方法并将功能区 XML 类返回给 Office 应用程序。

有关更多信息,请参见功能区 XML

将多个功能区项添加到项目

可以将多个功能区项添加到单个项目。 如果您想要执行以下两项任务之一,这会十分有用:

  • 为 Outlook 检查器创建功能区。 有关更多信息,请参见自定义 Outlook 功能区

    提示

    检查器是一个在用户执行特定任务(如创建电子邮件)时打开的窗口。

  • 选择要在运行时显示的功能区。

选择要在运行时显示的功能区

由于一个项目可以包含多个功能区,因此可以选择要在运行时显示的功能区。

若要选择一个要在运行时显示的功能区,请在项目的 ThisAddin、ThisWorkbook 或 ThisDocument 类中重写 CreateRibbonExtensibilityObject 方法,并返回要显示的功能区。 下面的示例检查一个名为 myCondition 的字段的值,并返回合适的功能区。

提示

此示例中使用的语法返回使用“功能区(可视化设计器)”项创建的功能区。 用于返回使用“功能区(XML)”项创建的功能区的语法稍有不同。 有关返回“功能区(XML)”项的更多信息,请参见功能区 XML

对于以 .NET Framework 4 为目标的项目,请添加以下代码:

Protected Overrides Function CreateRibbonExtensibilityObject() As  _
    Microsoft.Office.Core.IRibbonExtensibility
    If myCondition = True Then
        Return Globals.Factory.GetRibbonFactory().CreateRibbonManager _
            (New Microsoft.Office.Tools.Ribbon.IRibbonExtension() _
                 {New Ribbon1()})
    Else
        Return Globals.Factory.GetRibbonFactory().CreateRibbonManager _
            (New Microsoft.Office.Tools.Ribbon.IRibbonExtension() _
                 {New Ribbon2()})
    End If
End Function
    protected override Microsoft.Office.Core.IRibbonExtensibility
CreateRibbonExtensibilityObject()
    {
        if (myCondition == true)
        {
            return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
                new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new Ribbon1() });
        }
        else
        {
            return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
                new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new Ribbon2() });
        }
    }

对于以 .NET Framework 3.5 为目标的项目,请添加以下代码:

Protected Overrides Function CreateRibbonExtensibilityObject() As  _
    Microsoft.Office.Core.IRibbonExtensibility
    If myCondition = True Then
        Return New Microsoft.Office.Tools.Ribbon.RibbonManager _
            (New Microsoft.Office.Tools.Ribbon.OfficeRibbon() _
                 {New Ribbon1()})
    Else
        Return New Microsoft.Office.Tools.Ribbon.RibbonManager _
            (New Microsoft.Office.Tools.Ribbon.OfficeRibbon() _
                {New Ribbon2()})
    End If
End Function
    protected override Microsoft.Office.Core.IRibbonExtensibility
CreateRibbonExtensibilityObject()
    {
        if (myCondition == true)
        {
            return new Microsoft.Office.Tools.Ribbon.RibbonManager(
                new Microsoft.Office.Tools.Ribbon.OfficeRibbon[] 
                    { new Ribbon1() });
        }
        else
        {
            return new Microsoft.Office.Tools.Ribbon.RibbonManager(
                new Microsoft.Office.Tools.Ribbon.OfficeRibbon[] 
                    { new Ribbon2() });
        }
    }

相关主题

标题

说明

如何:开始自定义功能区

演示如何自定义 Microsoft Office 应用程序的功能区,如何将“功能区(可视化设计器)”“功能区(XML)”项添加到 Office 项目中。

功能区设计器

描述如何使用功能区设计器将自定义选项卡、组和控件添加到 Microsoft Office 应用程序的功能区。

演练:使用功能区设计器创建自定义选项卡

演示如何使用功能区设计器创建自定义功能区选项卡。 使用功能区设计器可以在自定义选项卡上添加和放置控件。

功能区对象模型概述

提供对强类型对象模型的概述,您可使用该模型在运行时获取和设置功能区控件的属性。

演练:在运行时更新功能区上的控件

演示如何在功能区加载到 Office 应用程序中后使用功能区对象模型更新功能区上的控件。

自定义 Outlook 功能区

提供在 Microsoft Office Outlook 中自定义功能区的指导。

自定义 InfoPath 功能区

提供在 Microsoft Office InfoPath 中自定义功能区的指导。

在运行时访问功能区

演示如何显示、隐藏和修改功能区,以及如何使用户能够从自定义任务窗格、操作窗格或 Outlook 窗体区域中的控件运行代码。

如何:更改功能区上选项卡的位置

演示如何更改功能区上选项卡的顺序。

如何:自定义内置选项卡

演示如何向内置选项卡添加组和控件。

如何:自定义 Microsoft Office 菜单

演示如何将控件添加到单击“文件”选项卡(对于 Office 2010)或“Microsoft Office 按钮”(对于 Office 2007)时打开的菜单中。

如何:向功能区组添加对话框启动器

演示如何向功能区上的任何组添加对话框启动器。

如何:将功能区从功能区设计器导出为功能区 XML

演示如何以高级方式自定义功能区,即从设计器中将功能区导出到功能区 XML。

功能区 XML

说明如何使用功能区 XML 来自定义功能区。

演练:使用功能区设计器创建自定义选项卡

演示如何使用“功能区(XML)”项创建自定义功能区选项卡。