visual-studio-2017 - VSTO 4/XML:如何使某些控件可选地可见
问题描述
我有一个由 VSTO-4 和 VS2017 制作的 XML 功能区,在 Outlook-2016 中运行。我使用的不是 Visual Studio 提供的设计器,而是整个“流利”模式(XML)。
如果这个功能区配有按钮,我的客户会因为同一个功能区中有这么多按钮/选项而“有点”迷失......而且它们中的大多数实际上只是我程序的“选项”。
我想用 3 个按钮制作这个 Ribbon(现在命名为 Ribbon-1),其中一个是“OPTIONS”命令按钮,来调用 Ribbon-2,这个按钮充满了我现在在 Ribbon 中拥有的所有其他按钮- 1.
显然,Ribbon-2 将出现在 Ribbon-1 的同一个 TAB 中(至少“出现在同一个 TAB 中”),一旦用户设置一个选项,他点击“BACK”按钮,Ribbon-2 消失,Ribbon -1 再次出现...
我们可以在一些插件中看到这种行为,我也想做同样的事情。
有什么建议吗?我很感激任何提示。
解决方案
与其使用多个功能区,不如将所有控件放在一个功能区中。使用该getVisible
属性来设置应选择隐藏或可见的所有按钮和组的可见性。使用 atoggleButton
显示/隐藏这些按钮。
的onAction
回调可以设置回调可以检查toggleButton
的类级变量。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>
VSTO 功能区 XML 的示例 VB.NET 代码:
'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
推荐阅读
- r - 传单折线不超过日期线传单
- sql - 在python中查询多个postgres表
- django - 使用 Django 的 Elelastic Beanstalk 上的 WSGI 问题
- php - PHP & jQuery 表单提交问题
- linux - libgnutls28-dev:apt 正在搜索错误的文件?
- c# - 如何获取要在身份验证请求正文中返回的属性?
- c - 如何在 C 中编写正确的包含和模块化我的应用程序?
- javascript - 发布到数据库不起作用(错误/警告:JSON 输入意外结束)
- python-3.x - Tensorflow 说层 conv2d 的 Input 0 与层不兼容:expected ndim=4, found ndim=3
- google-app-engine - 云构建 API