Microsoft Word 插件 - 添加到上下文菜单

Obs*_*ity 4 ms-word office-js

我已经构建了一个 Word 插件,现在想添加一个选项,以便在用户突出显示某个单词并右键单击它时从中调用函数。我在这里找到了有关如何修改manifest.xml 文件的文档,但它似乎没有显示如何添加到上下文菜单的完整示例,仅显示了如何添加按钮和下拉菜单。

该文档还向我指出了一个github页面显示示例,但同样缺少上下文菜单。它还指向这个视频,它似乎在 1:20 左右展示了我想要的内容,但也没有展示如何实现它。

到目前为止我有这个(添加在下面<FunctionFile>):

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Menu" id="TestMenu">
      <Label resid="ContextMenuLabel" />
      <Supertip>
          <Title resid="ContextualMenuTitle" />
          <Description resid="ContextualMenuTitleDesc" />
      </Supertip>
    </Control>         
  </OfficeMenu>
</ExtensionPoint>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此工具验证清单文件时,它告诉我缺少一个Icon元素,但我不需要上下文菜单的图像?

我想做的事情是否可能,如果可以,有人可以给我举个例子吗?


编辑:

我已经更新了我的代码以反映 @Mavi Domates 所写的内容

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Button" id="openSearchButton">
      <Label resid="openSearchButtonLabel" />
      <Supertip>
        <Title resid="openSearchButtonTitle" />
        <Description resid="openSearchButtonDescription" />
      </Supertip>
      <Icon>
        <bt:Image size="16" resid="Contoso.tpicon_16x16" />
        <bt:Image size="32" resid="Contoso.tpicon_32x32" />
        <bt:Image size="80" resid="Contoso.tpicon_80x80" />
      </Icon>
      <Action xsi:type="ExecuteFunction">
        <FunctionName>getData</FunctionName>
      </Action>
    </Control>
  </OfficeMenu>
</ExtensionPoint>
Run Code Online (Sandbox Code Playgroud)

当我添加此代码时(在默认值的正下方,<ExtensionPoint xsi:type="PrimaryCommandSurface">我的加载项不再显示在“我的加载项”菜单中。我下载了 Microsoft 的清单验证器,它告诉我我的清单没问题。

我已将范围缩小到Control导致问题的节点。如果我只是添加:

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
  </OfficeMenu>
</ExtensionPoint>
Run Code Online (Sandbox Code Playgroud)

我的加载项仍然显示在菜单中。我还在我的资源中添加了相关字符串<bt:ShortStrings>

<bt:String id="openSearchButtonLabel" DefaultValue="Check it out!" />
<bt:String id="openSearchButtonTitle" DefaultValue="Hover over me" />
<bt:String id="openSearchButtonDescription" DefaultValue="For more info go here" />
Run Code Online (Sandbox Code Playgroud)

我的代码看起来和文档完全一样。我不知道从这里该去哪里。如果这改变了事情的话,我正在使用Mac。

Mav*_*tes 6

你想做的事情是可能的,而且你已经非常接近它了:)

您已将 ContextMenu 控件选择为类型Menu而不是Button。这意味着您需要一些子菜单控件。

从此处的文档: https: //learn.microsoft.com/en-us/office/dev/add-ins/develop/create-addin-commands#step-7-add-the-resources-element

每组至少需要一个对照。控制元素可以是按钮或菜单。使用 Menu 指定按钮控件的下拉列表。目前仅支持按钮和菜单。有关详细信息,请参阅按钮控件和菜单控件部分。

这意味着如果您想要嵌套菜单,您的清单是正确的,您只需向其中添加项目+图标即可。下面您可以看到示例代码,该代码根据您单击的子菜单打开任务窗格/或执行函数。

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Menu" id="TestMenu">
      <Label resid="ContextMenuLabel" />
      <Supertip>
          <Title resid="ContextualMenuTitle" />
          <Description resid="ContextualMenuTitleDesc" />
      </Supertip>
      <Icon>
         <bt:Image size="16" resid="your_icon_16"/>
         <bt:Image size="32" resid="your_icon_32"/>
         <bt:Image size="64" resid="your_icon_64"/>
         <bt:Image size="80" resid="_icon_80"/>
      </Icon>
      <!-- Add your context sub-menu items -->
      <Items>
         <Item id="contextitem1">
            <Label resid="somecontextlabel1"/>
            <Supertip>
                <Title resid="somecontexttitle1"/>
                <Description resid="somedescription1"/>
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="someimage16"/>
                <bt:Image size="32" resid="someimage32"/>
                <bt:Image size="64" resid="someimage64"/>
                <bt:Image size="80" resid="someimage80"/>
            </Icon>
            <Action xsi:type="ShowTaskpane">
                <TaskpaneId>Mysupertaskpane1</TaskpaneId>
                <SourceLocation resid="TaskPaneSourceLocation1"/>
            </Action>
        </Item>

        <Item id="contextitem2">
            <Label resid="somecontextlabel2"/>
            <Supertip>
                <Title resid="somecontexttitle2"/>
                <Description resid="somedescription2"/>
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="someimage16"/>
                <bt:Image size="32" resid="someimage32"/>
                <bt:Image size="64" resid="someimage64"/>
                <bt:Image size="80" resid="someimage80"/>
            </Icon>
            <Action xsi:type="ExecuteFunction">
                <FunctionName>dosomejsmagic</FunctionName>
            </Action>
        </Item>
      </Items>
    </Control>         
  </OfficeMenu>
</ExtensionPoint>
Run Code Online (Sandbox Code Playgroud)

如果情况并非如此,并且您只是在寻找Button(因此没有子菜单) - 那么您可以使用此作为示例,查看控件类型现在设置为按钮

<ExtensionPoint xsi:type="ContextMenu">
    <OfficeMenu id="ContextMenuText">
        <Control xsi:type="Button" id="Button1Id1">
            <Label resid="residLabel" />
            <Tooltip resid="residToolTip" />
            <Supertip>
                <Title resid="residLabel" />
                <Description resid="residToolTip" />
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="icon1_32x32" />
                <bt:Image size="32" resid="icon1_32x32" />
                <bt:Image size="80" resid="icon1_32x32" />
            </Icon>
            <Action xsi:type="ExecuteFunction">
                <FunctionName>getData</FunctionName>
            </Action>
        </Control>
    </OfficeMenu>
</ExtensionPoint>
Run Code Online (Sandbox Code Playgroud)