Office 2019 功能区中的切换按钮

Toggle button in Office 2019 ribbon

我正在尝试在 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 的实例。所以它不允许我首先使回调无效或使用。我通过在 loadRibbon 子中添加 MsgBox("Loaded") 来验证这一点。以我的理解,一打开Word文档就应该出现一个消息框。

VBA 代码保存在启用宏的 Word 模板中,并存储在 %appData%\Microsoft\Word\STARTUP 中。添加一个从同一模板调用 Sub 的普通按钮正在运行。

当 Office 使 Fluent UI 控件无效并允许您指定是否按下切换按钮控件时,将调用 getPressed 回调。要调用回调,您需要使用 IRibbonUI.InvalidateControl 方法,该方法会使功能区用户界面上单个控件的缓存值无效。

您可以使用 COM 加载项中的回调过程自定义功能区 UI。对于加载项实现的每个回调,都会缓存响应。例如,如果外接程序编写器为按钮实现 getImage 回调过程,调用该函数一次,加载图像,然后如果需要更新图像,则使用缓存的图像而不是调用步骤。此过程对控件保持不变,直到加载项使用 InvalidateControl 方法发出缓存值无效的信号,此时再次调用回调过程并缓存 return 响应.

此外,getPressed 回调的签名如下所示:

Function GetPressed(control As IRibbonControl) As Boolean

它return是一个表示按下状态的布尔值。它不是像 onAction 那样的事件处理程序。

我终于找到了问题所在,现在已经解决了所有问题 运行ning。由于其他人可能 运行 遇到同样的问题,我解释一下我做了什么。

使用其他人编写的扩展自定义功能区的一种简单方法是转到“文件”>“选项”>“自定义功能区”,然后从右下角的 "Import/Export" 下拉框中选择 "Import customization file"角落。这将在 %localAppData%\Microsoft\Office 中创建一个名为 "Word.officeUI".

的文件

我认为将我自己的 xml 代码直接写入此文件是个好主意。它可以工作...只要您不想动态更新功能区。由于功能区的初始版本不需要动态更新,因此绝对没问题。因此,我也没有安装此 Office RibbonX Editor。一旦我用这个工具实现了我的定制,问题就解决了(还有许多其他创建,但都可以解决)。