有什么方法可以在 outlook 加载项中强制刷新或重绘控件?我基本上是在更新功能区中按钮的图像。该图像是通过 WebApi 调用在服务器中生成的,该调用包含新记录计数和新图像。这似乎工作正常,除非 outlook 窗口不是事件/聚焦窗口。
当我的加载项收到来自服务器的 SignalR 通知时,将执行以下代码段。该代码段调用 webapi 以获取包含按钮新图像的新信息。
我不确定自己做错了什么,但是当连接了多个屏幕/显示器并且 outlook 处于扩展屏幕(未聚焦)时,它不会使用新图像更新按钮,尽管代码已经被执行了。这些更改仅在我单击/关注 Outlook 时反射(reflect)出来。
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(
delegate (object o, DoWorkEventArgs args)
{
var info = MyServerCallToGetNewCountAndImage();
if (SynchronizationContext.Current != null)
{
var uiContext = SynchronizationContext.Current;
uiContext.Post(b =>
{
MyInfo i = (MyInfo)b;
// Update ribbon button image.
myButton.Image = i.Image;
}, info);
}
});
bw.RunWorkerAsync();
最佳答案
您需要调用IRibbonUI.Invalidate
。当您处理插件功能区的 onLoad
回调时,IRibbonUI
接口(interface)会传递给您的插件。
关于c# - Outlook 加载项 : RibbonToggleButton Image changes only refreshes when outlook window becomes active,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740443/