编辑:对不起,我刚刚意识到这是在 C# 论坛上,我用 VB 编写了函数。您需要我将代码翻译成 C# 吗?请注意,回调行为应该相同。
我发现更新控件的最简单方法是使控件或整个功能区无效,并通过控件的回调(如 getImage、getVisible、getLabel 等)更新参数我在这里写的内容适用于任何控件的参数(标签,启用,可见,...)
因此,如果您以这种方式在 XML 中定义按钮:
<button id="MyButton"
label="MyLabel"
onAction="OnAction"
getImage="GetImage"/>
然后,您可以使用 OnAction 回调以这种方式更新按钮的参数(假设您有一个名为condition的布尔变量):
Public Sub OnAction(ByVal control As Office.IRibbonControl)
// Do your button stuff here
condition = Not condition
gui.InvalidateControl(control.Id)
End Sub
然后按钮的回调将被调用,对于 getImage 你可以使用:
Public Function GetImage(ByVal control As Office.IRibbonControl) As String
If condition Then
Return "MacroPlay"
Else
Return "DeclineInvitation"
End If
End Function
请注意,要使所有这些工作,您需要将功能区存储到gui变量中。为此,您需要在 XML 中使用:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnRibbonLoad"> ...
并在代码中:
Public Sub OnRibbonLoad(ByVal ribbon As Office.IRibbonUI)
gui = ribbon
End Sub