1

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

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

文档非常清楚这些回调的语法,但没有说明调用它们的时间和频率。

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

<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 样式绑定不是一个选项。

4

1 回答 1

4

正如您所发现的,Excel 缓存功能区控件的状态。做您想做的事情的唯一方法是在每次您有影响它们的状态更改时使功能区/控件无效。因此,在您的情况下,无论何时API.URL更改,您都需要手动使功能区或控件无效。

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

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

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

private IRibbonUI _ribbon;

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

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

    ...
    _ribbon.Invalidate();
    // or //
    _ribbon.InvalidateControl("YourControlID");
    ...
于 2013-08-01T17:27:14.557 回答