显示或隐藏VSTO Addin功能区

时间:2018-03-20 19:43:32

标签: ms-office vsto office-interop ribbon comaddin

如果使用某个参数启动Office应用程序,我的目标是简单地提供我的插件。

不幸的是,我找不到任何可以帮助我做到这一点。我试图使用Office应用程序加载加载swtich /lc:Addin.dll但没有成功。我接受的一个选择是在希望启动插件时创建所有Office插件注册表项,但这看起来非常笨拙并且开销很多。此外,我的交易破坏者要求注册表创建提升权限,以初始化插件。

我决定让我的插件在启动时不做任何事情,除非存在某个环境变量。

为了这样做,我需要将功能区默认设置为不可见,并在发现env变量时显示功能区。或者相反,默认情况下可以看到功能区,并在发现env变量时隐藏功能区。

我尝试过的事情

  • 设置功能区的标签Globals.Ribbons.MyRibbon.MyTab.visible = false
  • 使功能区Globals.Ribbons.MyRibbon.RibbbonUi.Invalidate()无效。
  • 将设置显示为false Globals.Ribbons.MyRibbon.RibbbonUi.InvalidateControl(tabCtrlId)后无效选项卡。

尝试过的事情不包括在某些情况下尝试仅加载插件的几十件事。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

在深入研究基类AddinBase之后

我发现了一些可供我覆盖的方法。

所以我覆盖了CreateRibbonExtensibilityObject方法。

protected override IRibbonExtensibility CreateRibbonExtensibilityObject( )
{
    if( Environment.GetCommandLineArgs( ).ToList( ).FirstOrDefault( a => a.ToLower( ).Contains( "/launchmyaddin" ) ) != null )
    {
        return null;
    }

    return base.CreateRibbonExtensibilityObject( );
}
  

这样做是为了防止在我的开关存在时甚至被创建功能区,如果它存在,那么我只是传递给基类实现,以使Addin像我一样创建我的功能区。

此外,CreateRibbonExtensibilityObject()返回一个GetCustomUI( ribbonXml )的对象,以便我们可以从xml创建自定义功能区。 这给了我们更多的力量。

我的解决方案只需要在启动时显示/隐藏一次功能区。我确实想过如何打开和关闭它,所以我去寻找我可以覆盖的其他成员。

我相信你可以覆盖我认为每次调用功能区无效时都会被调用的CreateRibbonObjects( )成员。在这里,您可以从基类返回的集合中删除表示您要隐藏的功能区的项目。