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 这些按钮。
toggleButton
的 onAction
回调可以设置 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
我有一个由 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 这些按钮。
toggleButton
的 onAction
回调可以设置 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