我在 Word 加载项功能区中创建了两个按钮:button1 和 button2
当我打开类型 1 的文档时,我只显示 button1,当我打开第二种类型的文档时,我只显示 button2。
问题是,例如,当我打开第一个文档并将其保持打开状态时,在使用第二种类型打开第二个文档后,我总是在功能区中找到 button1。
即使第一个文档仍处于打开状态,如何强制第二个文档显示 button2 而不是 button1。
我在 Word 加载项功能区中创建了两个按钮:button1 和 button2
当我打开类型 1 的文档时,我只显示 button1,当我打开第二种类型的文档时,我只显示 button2。
问题是,例如,当我打开第一个文档并将其保持打开状态时,在使用第二种类型打开第二个文档后,我总是在功能区中找到 button1。
即使第一个文档仍处于打开状态,如何强制第二个文档显示 button2 而不是 button1。
在文档更改事件期间使功能区失效(刷新)。
private Office.IRibbonUI ribbon;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
Globals.ThisAddIn.Application.DocumentChange += DocumentChangeEvent;
}
private void DocumentChangeEvent()
{
ribbon.Invalidate();
}
您需要getVisible
在自定义 UI 的功能区 XML 标记中定义回调。然后在需要时,您可以通过调用IRibbonUI接口的InvalidateControl或Invalidate方法来更新您的控件(实际上是强制 Word 调用您的回调) 。
您可以考虑使用 Application 类的WindowActivate或DocumentChange事件来检查功能区控件是否应该更新。如果是这样,请调用 Invalidate* 方法。不要每次都调用这些方法。
若要最大限度地减少对性能的影响,请使用 InvalidateControl 方法而不是 Invalidate 方法,除非您确实需要使外接程序定义的所有自定义控件或菜单项无效。调用 Invalidate 会使加载项定义的所有控件和菜单项失效,并且在打开的控件和菜单上发生回调。
在 MSDN 中的以下系列文章中阅读有关 Fluent UI(又名 Ribbon UI)的更多信息:
您应该使 Window Activate 上的功能区无效
public Office.IRibbonUI ribbon;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.WindowActivate += new Word.ApplicationEvents4_WindowActivateEventHandler(DocumentActivate);
}
private void DocumentActivate(Word.Document doc, Word.Window win)
{
ribbon.Invalidate();
}