Share via


向快捷菜单添加命令

本主题演示如何使用 VSTO 外接程序将命令添加到 Office 应用程序的快捷菜单中。

适用于:本主题中的信息适用于文档级别项目和 VSTO 外接程序项目。 请参阅按 Office 应用程序和项目类型提供的功能

将命令添加到 Office 的快捷菜单中

  1. 将“功能区 XML” 项添加到文档级项目或 VSTO 外接程序项目中。 有关详细信息,请参阅如何:开始自定义功能区。 In

  2. 在“解决方案资源管理器”中,选择“” 或“”

  3. 在菜单栏上,选择“视图”>“代码”

    “ThisAddin” 类文件随即在代码编辑器中打开。

  4. 将下面的代码添加到 ThisAddin 类中。 此代码可替代 CreateRibbonExtensibilityObject 方法,并将功能区 XML 类返回到 Office 应用程序。

    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
          return new Ribbon1();
    }
    
  5. 在“解决方案资源管理器” 中,选择功能区 XML 文件。 默认情况下,功能区 XML 文件命名为 Ribbon1.xml

  6. 在菜单栏上,选择“视图”>“代码”

    功能区 XML 文件随即在代码编辑器中打开。

  7. 在代码编辑器中添加 XML,该 XML 描述快捷菜单以及要添加到快捷菜单的控件。

    下面的示例将向 Word 文档的快捷菜单添加按钮、菜单和库控件。 此快捷菜单的控件 ID 是 ContextMenuText。 有关 Office 2010 快捷控件 ID 的完整列表,请参阅 Office 2010 帮助文件:Office Fluent 用户界面控件标识符

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
      <contextMenus>
        <contextMenu idMso="ContextMenuText">
          <button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
          <menu id="MySubMenu" label="My Submenu" >
            <button id="MyButton2" label="Button on submenu" />
          </menu>
          <gallery id="galleryOne" label="My Gallery">
            <item id="item1" imageMso="HappyFace" />
            <item id="item2" imageMso="HappyFace" />
            <item id="item3" imageMso="HappyFace" />
            <item id="item4" imageMso="HappyFace" />
          </gallery>
        </contextMenu>
      </contextMenus>
    </customUI>
    
  8. 在“解决方案资源管理器” 中,选择“MyRibbon.cs” 或“MyRibbon.vb”

  9. 向要处理的每个控件的 Ribbon1 类添加一个回叫方法。

    下面的回叫方法将处理“我的按钮” 按钮。 此代码会在光标当前位置向活动文档添加一个字符串。

    public void GetButtonID(Office.IRibbonControl control)
    {
        Microsoft.Office.Interop.Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
        currentRange.Text = "This text was added by the context menu named My Button.";
    }