Visual studio 2017 VSTO 4/XML:如何使某些控件可选地可见

Visual studio 2017 VSTO 4/XML:如何使某些控件可选地可见,visual-studio-2017,vsto,office-interop,ribbonx,Visual Studio 2017,Vsto,Office Interop,Ribbonx,我有一个由VSTO-4和VS2017制作的XML功能区,在Outlook-2016中运行。我使用的不是VisualStudio提供的设计器,而是整个Fluent模式XML 这个功能区如果用按钮来实现,我的客户会因为同一个功能区中有这么多按钮/选项而有点不知所措。。。其中大多数都只是我的程序的选项 我想将此功能区命名为now Ribbon-1,其中只有3个按钮,其中一个是选项命令按钮,以调用Ribbon-2,此功能区填充了Ribbon-1中现有的所有其他按钮 显然,Ribbon-2将出现在Ribb

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

这个功能区如果用按钮来实现,我的客户会因为同一个功能区中有这么多按钮/选项而有点不知所措。。。其中大多数都只是我的程序的选项

我想将此功能区命名为now Ribbon-1,其中只有3个按钮,其中一个是选项命令按钮,以调用Ribbon-2,此功能区填充了Ribbon-1中现有的所有其他按钮

显然,Ribbon-2将出现在Ribbon-1的同一选项卡上,至少出现在同一选项卡上。一旦用户设置了选项,他单击“上一步”按钮,Ribbon-2将消失,Ribbon-1将再次出现

我们可以在一些加载项中看到这种行为,我也希望这样做

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

与其使用多个功能区,不如将所有控件放在一个功能区中。使用getVisible属性设置所有按钮和组的可见性,这些按钮和组可以选择隐藏或可见。使用切换按钮显示/隐藏这些按钮

toggleButton的onAction回调可以设置getVisible回调可以检查的类级变量。然后,该过程将使功能区无效,从而触发getVisible回调。依次检查类级别变量以确定每个按钮的可见性状态

请注意,在加载功能区时也会执行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>
'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
VSTO功能区XML的VB.NET代码示例:

<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>
'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

您可以将getVisible属性与回调一起用于同一RibbonXML中的组和/或按钮。使用toggleButton设置类级别字段,然后触发Ribbon的Invalidate事件,该事件将导致get属性的回调运行。Hmmm。。。非常有趣的方法@Cindymister。我一定会试试这个,我很感激你的建议,我会很快带着我的结果回来。