RibbonControl属性回调(getPressed、getSupertip等)从不更新

本文关键字:更新 getSupertip 属性 回调 getPressed RibbonControl | 更新日期: 2023-09-27 18:25:47

虽然一些办公室功能区控件属性可以直接设置(如Label),但大多数都使用回调来设置属性。例如按钮的图像:

<button id="btnRecalculate" getImage="GetRibbonControlImage" label="Recalculate Now"  onAction="OnButtonAction" size="normal" />

文档中非常清楚这些回调的语法,但不清楚它们被调用的时间和频率。

我现在面临一个问题,当一个值以程序方式更改时,我想修改功能区上的一个特性(例如按钮上的工具提示)。我为超级提示定义了一个回调,如下所示:

<button id="btnSetServerURL" getSupertip="GetSuperTip" label="Set Server URL" />

以及背后的代码:

public string GetSuperTip(IRibbonControl control)
{
    switch( control.Id )
    {
        case "btnSetServerURL":
            return "Click to set the server URL. (Currently: " + API.URL + ")";
        default:
            return "";
    }
}

当该URL更改时,下次用户将鼠标悬停在该按钮上时,我希望调用GetSuperTip回调,并显示正确的当前URL,但现在只是第一次设置该值,以后再也不会设置了。

有什么方法可以得到我想要的行为吗?这是一个Excel加载项,所以据我所知,WPF样式的绑定不是一个选项。

RibbonControl属性回调(getPressed、getSupertip等)从不更新

正如您所发现的,Excel缓存功能区控件的状态。执行所需操作的唯一方法是,每次发生影响功能区/控件的状态更改时,使其无效。因此,在您的情况下,每当API.URL发生更改时,都需要手动使功能区或控件无效。

1) 在customUI XML中包含onLoad属性。

<customUI ... onLoad="OnRibbonLoad" ...>
    ...
</customUI>

2) 在回调中,存储功能区界面:

private IRibbonUI _ribbon;
public void OnRibbonLoad(IRibbonUI ribbon)
{
    _ribbon = ribbon;
}

3) 稍后,当状态更改影响功能区时,使功能区或其控件无效:

    ...
    _ribbon.Invalidate();
    // or //
    _ribbon.InvalidateControl("YourControlID");
    ...