編集:申し訳ありませんが、これが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