C# Outlook Mailitem ContextMenu 和 Ribbon 不能一起工作(只能单独使用)

C# Outlook Mailitem ContextMenu and Ribbon do not work together (only separately)

我需要创建一个 Outlook 加载项,其中功能区将在工具栏和上下文菜单上工作(右键单击 mailitem)。

一开始,这两件事我都是在不同的项目中分别做的。

在 1 个项目中,我添加了 Ribbon(视觉设计)。启动后效果很好

在 2 项目中,我想为邮件做上下文菜单。 在classThisAddIn.cs中添加:

protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new OutlookAddInExtensibility();
        }

然后我添加 class OutlookAddInExtensibility.cs:

[ComVisible(true)]
    public class OutlookAddInExtensibility : IRibbonExtensibility
    {
        public string GetCustomUI(string RibbonID)
        {
            return
                @"<?xml version=""1.0"" encoding=""UTF-8""?>
                    <customUI xmlns=""http://schemas.microsoft.com/office/2009/07/customui"">
                        <contextMenus>    
                            <contextMenu idMso=""ContextMenuMailItem"">
                                <button 
                                    id=""MyContextMenuMailItem""
                                    label=""My new button label""
                                    onAction=""RibbonMenuClick""
                                />
                            </contextMenu>  
                        </contextMenus>
                    </customUI>
                ";
        }

        public void RibbonMenuClick(IRibbonControl control)
        {
            MessageBox.Show("Show text");
        }

启动后效果很好

不幸的是,当我在一个项目中添加这两个东西时 - 只有 ContectMenu 起作用。顶部的功能区未显示。

有谁知道这个问题的解决方法吗?

您需要选择一种方式来自定义 UI - 将 Visual Studio 中设计的功能区 UI 导出到功能区 XML 文件中,然后将它们组合在一起.不要忘记根据传递给 GetCustomUI 方法的 RibbonID 参数 return 适当的标记。

在 Office 应用程序(在 VSTO 中)中创建自定义 UI 有两种方法:

  1. Walkthrough: Create a custom tab by using the Ribbon Designer
  2. Walkthrough: Create a custom tab by using Ribbon XML

由于 VSTO 功能区设计器不提供和支持您需要将现有 UI 导出到 XML 并继续处理它的所有功能区功能。

有关详细信息,请参阅 How to: Export a ribbon from the Ribbon Designer to Ribbon XML

感谢@Eugene Astafiev 的帮助,我找到了解决方案。将 RibbonVisualDesigner 导出到 XML。并将代码从 ContextMenu 添加到 XML。二合一:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab id="testTab" label="Test Label">
        <group id="testGroup" label="test">
          <button id="testButton" onAction="testAction" label="Test" size="large"
              getImage ="GetCustomImage" screentip="Test Ribbon Functionality."/>
        </group>
      </tab>
    </tabs>
  </ribbon>
  <contextMenus>
    <contextMenu idMso="ContextMenuMailItem">
      <button idMso="FontDialog" visible="false" />
      <toggleButton id="MyToggle" label="My Toggle Button" />
      <button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
      <menuSeparator id="MySeparator" />
      <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>
      <dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
    </contextMenu>
  </contextMenus>
</customUI>