gpt4 book ai didi

c# - RibbonControl 属性回调(getPressed、getSupertip 等)永不更新

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:57 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

正如您所发现的,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");
...

关于c# - RibbonControl 属性回调(getPressed、getSupertip 等)永不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18000371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com