xml - Office 2019 功能区中的切换按钮
问题描述
我正在尝试在 Word 2019 功能区中获取切换按钮。
我在 Stack Overflow 上查看了很多示例,但我没有让它运行。
我的 XML 看起来像:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="loadRibbon">
<ribbon>
<tabs>
<tab id="doc_management" label="Publishing" insertBeforeQ="TabDeveloper">
<group id="doc_drafting" label="Drafting" autoScale="true">
<toggleButton id="toggling" label="Insert Watermark" imageMso="WatermarkGallery" onAction="togglingWatermark" getPressed="buttonPressed"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
对应的VBA代码:
Option Explicit
Public myRibbon As IRibbonUI
Public isPressed As Boolean
Sub loadRibbon(ribbon As IRibbonUI)
Set myRibbon = ribbon
End Sub
Sub togglingWatermark(control As IRibbonControl, pressed As Boolean)
Select Case control.ID
isPressed = pressed
Case "toggling"
If isPressed Then
MsgBox isPressed
Else
MsgBox isPressed
End If
End Select
myRibbon.InvalidateControl control.ID
End Sub
Sub buttonPressed(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case "toggling"
returnedVal = isPressed
End Select
End Sub
存在带有相应按钮的自定义选项卡。我也可以切换按钮。但我希望在切换后立即看到一个弹出屏幕。这并没有发生。我错过了什么?任何帮助将不胜感激!
编辑:
似乎没有加载 IRibbonUI 的实例。所以它不允许我首先使回调无效或使用回调。我通过添加Sub验证MsgBox("Loaded")
了这一点。loadRibbon
据我了解,一旦打开 Word 文档,就会出现一个消息框。
VBA 代码保存在启用宏的 Word 模板中,并存储在 %appData%\Microsoft\Word\STARTUP 中。添加一个从同一模板调用 Sub 的普通按钮正在工作。
解决方案
当getPressed
Office 使 Fluent UI 控件无效并允许您指定是否按下切换按钮控件时调用回调。要调用回调,您需要使用IRibbonUI.InvalidateControl方法,该方法使功能区用户界面上单个控件的缓存值无效。
您可以使用 COM 加载项中的回调过程自定义功能区 UI。对于加载项实现的每个回调,响应都会被缓存。例如,如果外接程序编写器实现getImage
了按钮的回调过程,则调用该函数一次,加载图像,然后如果需要更新图像,则使用缓存的图像而不是调用该过程。对于控件,此过程保持在原地,直到加载项通过使用该InvalidateControl
方法发出缓存值无效的信号,此时,再次调用回调过程并缓存返回响应。
此外,getPressed
回调的签名如下所示:
Function GetPressed(control As IRibbonControl) As Boolean
它返回一个布尔值,指示按下状态。它不是像这样的事件处理程序onAction
。
推荐阅读
- reactjs - 子组件仅在第一次渲染时运行,但不会在传递给同一个子组件的每个状态更改时运行
- python - 使用 isocalendar 时如何处理 nan
- reporting-services - 自定义 SSRS 数据处理扩展未在服务器上列出
- java - Exoplayer FFMPEG 问题。添加 Exoplayer FFMPEG 扩展后,视频在第一帧冻结
- java - 令牌清理器 Java 方法
- javascript - 即使在查询中使用 rand() 后,PHP 中的 SQL 选择查询每次都会给出相同的输出
- python - 代码段中的 NameError
- elasticsearch - Logstash 无法检索存储在 logstash-keystore 中的密钥
- spring - 限制 spring rest docs 中响应数组的数量
- ruby-on-rails - 使用 Rails Arel 从块生成复杂的单个 SQL 查询