VSTO 4/XML:如何使某些控件可选可见

VSTO 4/XML: how to make certain controls optionally visible

我有一个由 VSTO-4 和 VS2017 制作的 XML 功能区,可在 Outlook-2016 中运行。我没有使用 Visual Studio 提供的设计器,而是使用整个 "Fluent" 模式 (XML)。

这个功能区如果用按钮实现,我的客户 "a little bit" 会迷失在同一个功能区中这么多 buttons/options...而且他们中的大多数实际上只是我的 "options"程序。

我想用 3 个按钮制作这个功能区(现在命名为 Ribbon-1),其中一个是 "OPTIONS" 命令按钮,调用 Ribbon-2,这个功能区充满了所有其他按钮我现在在 Ribbon-1 中的按钮。

显然,Ribbon-2 将出现在与 Ribbon-1 相同的 TAB 中(至少 "appearing be in the same TAB"),一旦用户设置了一个选项,他点击 "BACK" 按钮和 Ribbon- 2 消失,Ribbon-1 再次出现...

我们可以在某些插件中看到这种行为,我也想这样做。

有什么建议吗? 我很感激任何提示。

与其使用多个功能区,不如将所有控件放在一个功能区中。使用 getVisible 属性来设置应可选择隐藏或可见的所有按钮和组的可见性。使用 toggleButton 到 show/hide 这些按钮。

toggleButtononAction 回调可以设置 getVisible 回调可以检查的 class 级变量。该过程然后使功能区无效,以便触发 getVisible 回调。这些依次检查 class 级变量以确定每个按钮的可见性状态。

请注意,get 回调也会在功能区加载时执行。

色带示例 XML:

<group id="MyGroup" label="TEST empty" visible="true">
  <button id="testButton" label="test empty" visible="true"/>
  <toggleButton id="testToggle" label="toggle optional buttons" visible="true" onAction="toggleVisibleControls"/>
  <button id="optionalButton" label ="optional" getVisible="isVisible" />
</group>
<group id="Optional" label="Optional group" getVisible="isVisible"></group>

VSTO 功能区的示例 VB.NET 代码 XML:

'Generated by VSTO
<Runtime.InteropServices.ComVisible(True)> _
    Public Class Ribbon1
    Implements Office.IRibbonExtensibility

    Private ribbon As Office.IRibbonUI
    Private ShowHide As Boolean = False

    Public Sub New()
    End Sub

    Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
        Return GetResourceText("VB2010addin_RibbonXML.Ribbon1.xml")
    End Function

#Region "Ribbon Callbacks"
    'Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1.
    Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
        Me.ribbon = ribbonUI
     End Sub

    Public Function isVisible(ByVal control As Office.IRibbonControl) As Boolean
        Return Me.ShowHide
    End Function

    Public Sub toggleVisibleControls(ByVal control As Office.IRibbonControl, pressed As Boolean)
        ShowHide = pressed
        ribbon.Invalidate()
    End Sub

#End Region