【问题标题】:How do you refresh the ribbons in all open windows您如何刷新所有打开的窗口中的功能区
【发布时间】:2015-02-03 20:11:36
【问题描述】:

我正在编写一个 VSTO Outlook 2013 加载项并创建了一个资源管理器 XML 功能区文件来显示一些自定义功能区按钮。当单击功能区按钮时,插件会运行一个长时间运行的异步进程,并且我在资源管理器功能区中显示“正在加载详细信息...”标签,以通知用户正在发生的事情并允许他们继续在 Outlook 中工作。

当长时间运行的进程完成时,它会调用以下代码来刷新功能区并隐藏加载标签:

RibbonUI.Invalidate();

问题是,如果用户打开了 2 个资源管理器窗口,则只有活动窗口中的功能区会被刷新(而其他资源管理器窗口仍然显示正在加载标签)。

我尝试循环打开的资源管理器窗口并激活每个窗口以尝试强制功能区刷新,但没有成功。

谁能告诉我如何强制刷新 Outlook 中所有打开窗口中的功能区?

【问题讨论】:

    标签: c# vsto outlook-addin


    【解决方案1】:

    IRibbonExtensibility.GetCustomUI 回调被调用了多少次?

    当您将焦点移到另一个 Outlook 窗口时,通常应该调用您的功能区回调。

    【讨论】:

    • GetCustomUI 回调在 2 个资源管理器窗口打开的情况下为“Microsoft.Outlook.Explorer”调用一次。那么如何强制刷新两个资源管理器窗口中的功能区呢?
    • 你这样做是对的。两个资源管理器窗口都应该更新它们的状态。稍后将尝试重现该问题。
    • RibbonUI 在执行 onLoad 回调时必须被缓存。那是你缓存 RibbonUI 对象的地方吗?
    • 我认为 IRibbonUI 实例已正确缓存,因为活动资源管理器窗口已正确更新。
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多