在特定展望标签

时间:2016-11-15 09:23:46

标签: c# outlook vsto outlook-addin

我正在使用VSTO开发Outlook AddIn。我通过XML管理功能区选项卡和上下文菜单,现在我只想在Outlook的“邮件”或“联系人”选项卡处于活动状态时显示我的自定义选项卡。

我已经尝试使用IdMso来解决它,这对我来说不是一个解决方案,因为它只会扩展内置选项卡(因此会执行上下文选项卡)。

进一步的研究没有为我提供任何解决方案或任何方法。

当我更改Outlook标签(例如从邮件到日历)时,是否有任何机会触发任何回调或事件,以便我可以通过我想要的代码设置可见性?如果没有,那么另一种方法是什么?

提前致谢。

EDIT1:

与此同时,我想出了如何仅在资源管理器中显示自定义功能区:

public string GetCustomUI(string ribbonID)
{
    if(ribbonID == "Microsoft.Outlook.Explorer")
        return GetResourceText("Ribbon.xml");

    return String.Empty;
}

Edit2(解决方案):

所以我终于让它工作了,不像我想象的那样,但解决方案是可以接受的。

public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
    this.ribbon = ribbonUI;
    Globals.ThisAddIn.Application.ActiveExplorer().NavigationPane.ModuleSwitch += NavigationPane_ModuleSwitch;
    Globals.ThisAddIn.Application.Explorers.NewExplorer += Explorers_NewExplorer;
}

private void Explorers_NewExplorer(Outlook.Explorer Explorer)
{
    Explorer.NavigationPane.ModuleSwitch += NavigationPane_ModuleSwitch;
}

private void NavigationPane_ModuleSwitch(Outlook.NavigationModule CurrentModule)
{
    ribbon.Invalidate();
}

public bool EnableButton(Office.IRibbonControl ribbonControl)
{
    Outlook.OlNavigationModuleType currentModuleType = Globals.ThisAddIn.Application.ActiveExplorer().NavigationPane.CurrentModule.NavigationModuleType;
    if (currentModuleType == Outlook.OlNavigationModuleType.olModuleContacts || currentModuleType == Outlook.OlNavigationModuleType.olModuleMail)
    {
        return true;
    }
    return false;
}

虚拟按钮的XML:

<button id="btnDummy" label="Click Me"        onAction="TestFunc"  size="large"  getImage="GetDummyImage"  getEnabled="EnableButton"/>

因此,每个资源管理器都可以访问它的导航窗格,并且此窗格有一个名为“ModuleSwitch”的事件(当您切换模块时它会触发,例如从联系人发送到Mail),然后我使功能区无效。在每次失效时,会调用几个函数,如“getEnabled”函数。在给定的getEnabled函数中,我正在检查哪个模块当前处于活动状态并返回所需的值。

0 个答案:

没有答案
相关问题