Ala*_*ain 1 c# excel ribbon callback excel-addins
虽然某些 Office 功能区控件属性可以直接设置(例如标签),但大多数使用回调来设置属性。例如按钮的图像:
<button id="btnRecalculate" getImage="GetRibbonControlImage" label="Recalculate Now" onAction="OnButtonAction" size="normal" />
Run Code Online (Sandbox Code Playgroud)
文档对这些回调的语法非常清楚,但没有说明调用它们的时间和频率。
我现在面临一个问题,当以编程方式更改值时,我想修改功能区上的其中一个属性(例如按钮上的工具提示)。我为超级提示定义了一个回调,如下所示:
<button id="btnSetServerURL" getSupertip="GetSuperTip" label="Set Server URL" />
Run Code Online (Sandbox Code Playgroud)
以及隐藏的代码:
public string GetSuperTip(IRibbonControl control)
{
switch( control.Id )
{
case "btnSetServerURL":
return "Click to set the server URL. (Currently: " + API.URL + ")";
default:
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
当该 URL 更改时,下次用户将鼠标悬停在该按钮上时,我希望调用 GetSuperTip 回调并显示消息以显示正确的当前 URL,但现在该值只是第一次设置,再也不会设置。
有什么办法可以得到我寻求的行为吗?这是一个 Excel 插件,据我所知,WPF 样式绑定不是一个选项。
正如您所发现的,Excel 会缓存功能区控件的状态。做您想做的事情的唯一方法是每次发生影响功能区/控件的状态更改时使它们无效。因此,在您的情况下,每当API.URL
发生更改时,您都需要手动使功能区或控件失效。
onLoad
1)在 XML 中包含该属性customUI
。
<customUI ... onLoad="OnRibbonLoad" ...>
...
</customUI>
Run Code Online (Sandbox Code Playgroud)
2)在回调中,存储功能区界面:
private IRibbonUI _ribbon;
public void OnRibbonLoad(IRibbonUI ribbon)
{
_ribbon = ribbon;
}
Run Code Online (Sandbox Code Playgroud)
3) 稍后,当状态更改影响功能区时,使功能区或其控件无效:
...
_ribbon.Invalidate();
// or //
_ribbon.InvalidateControl("YourControlID");
...
Run Code Online (Sandbox Code Playgroud)