触发对iribbonextensibability . getcustomui()的调用来强制ribbon UI刷新

本文关键字:ribbon 刷新 UI 调用 iribbonextensibability getcustomui | 更新日期: 2023-09-27 18:17:06

我正在开发一个Office插件。由于功能区控件的一些限制(例如menuSeparator没有可见性控制或splitButton不能托管dynamicMenu只有menu),我需要能够使Office应用程序通过重复调用我的外接程序的IRibbonExtensibility.GetCustomUI来重新加载功能区。

这可能吗?

触发对iribbonextensibability . getcustomui()的调用来强制ribbon UI刷新

据我所知,这将需要停止然后重新启动您的加载项。一定有一种方法可以做到这一点,因为人们可以访问outlook中的加载项列表。您可以运行外接程序的另一个实例,它将首先关闭前一个实例,然后返回更新后的功能区XML。但这意味着当用户单击功能区的组件时,它将不适用,并且您必须将所有数据保存在某个地方,然后读取它以恢复加载项状态。此外,用户可能会看到功能区消失和再次出现,这可能是不受欢迎的。

Ribbon.Invalidate()方法是否适合您的用例?当我动态添加/删除项目时,我经常使用它来刷新功能区。

例如,在Ribbon c#文件(默认为Ribbon .cs)中:

this.ribbon.Invalidate();

当需要刷新功能区时。假设你已经设置了这个。在Ribbon_Load方法中。