Outlook 2013加载项动态上下文菜单

时间:2014-05-04 17:07:51

标签: .net vsto contextmenu outlook-addin outlook-2013

我有一个Outlook 2007加载项,我试图在Outlook 2013中工作。它主要工作,但加载项右键单击电子邮件和文件夹时显示的其他上下文菜单项没有最初出现在Outlook 2013中。基于this answer我创建了一个功能区xml。功能区xml中定义的其他上下文菜单项现在显示在Outlook 2013中。

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

如何修改,添加&使用Outlook 2013在运行时删除上下文菜单项?

这必须是可能的,因为this Add-in Express post提到了ADXRibbonButton.PropertyChanging事件。如果他们在加载项快递中有事件,那么还必须能够在没有加载项快速的情况下观察类似的事件吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

e.g。

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;
        }
    }
}