1

我有一个 Outlook 2007 加载项,我正试图在 Outlook 2013 中工作。它大部分都在工作,但在右键单击电子邮件和文件夹时加载项显示的其他上下文菜单项最初并未显示在 Outlook 2013 中。基于这个答案,我创建了一个功能区 xml。功能区 xml 中定义的其他上下文菜单项现在显示在 Outlook 2013 中。

但是,我需要根据选择自定义上下文菜单项;例如,如果电子邮件来自已知电子邮件地址,则显示上下文菜单项以将电子邮件移动到与该电子邮件地址关联的文件夹。我通过在 Outlook 2007 中处理 ItemContextMenuDisplay 来做到这一点,但该事件在 Outlook 2013 中不再触发。

如何在 Outlook 2013 运行时修改、添加和删除上下文菜单项?

这一定是可能的,因为这个 Add-in Express 帖子提到了 ADXRibbonButton.PropertyChanging 事件。如果他们在 add-in express 中有事件,那么在没有 Add-in Express 的情况下也必须可以观察到类似的事件?

4

1 回答 1

2

您必须使用回调方法(在 XML 文件中指定)来控制项目是否可见。事实上,有很多回调可用,您可以指定自定义 XML 文件中的上下文菜单(它们都以 get 开头)。例如 getEnabled、getImage、getDescription、getVisible 等。

因此,例如要控制 Contact Item 上下文菜单中的按钮是否可见,您可以设置 getVisible XML 属性以调用方法中返回的类对象中的CreateRibbonExtensibilityObject()方法(在 ThisAddIn.cs 文件中)。

注意 您需要确保您在CreateRibbonExtensibilityObject()方法中返回的对象实现了MSOffice.IRibbonExtensibility接口。

例如

public partial class ThisAddIn : IThisAddInView
{
    protected override MSOffice.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new MyRibbonCallbacks();
    }
}

在下面的示例中,我告诉上下文菜单按钮调用 GetVisible 方法来锻炼是否可见。

<contextMenu idMso="ContextMenuContactItem">
  <menuSeparator id="Separator1" />

  <button id="AddNoteButton"
          label="Add note"
          onAction="OnActionButton"
          getVisible="GetVisible"/>
</contextMenu>

并且在 GetVisible 方法锻炼中,菜单项是否应该可见

public class MyRibbonCallbacks : MSOffice.IRibbonExtensibility
{
    public bool GetVisible(Microsoft.Office.Core.IRibbonControl control)
    {
        switch (control.Id)
        {
            case "AddNoteButton":
                // Work out if the button should be visible or not. 
                // And return true for visible. And false for invisible

                // Visible if current time is 11 o clock or after (just an example)
               return DateTime.Now.Hour >= 11;
        }
    }
}
于 2014-07-04T13:52:46.973 回答