0

我在 Word 加载项功能区中创建了两个按钮:button1 和 button2

当我打开类型 1 的文档时,我只显示 button1,当我打开第二种类型的文档时,我只显示 button2。

问题是,例如,当我打开第一个文档并将其保持打开状态时,在使用第二种类型打开第二个文档后,我总是在功能区中找到 button1。

即使第一个文档仍处于打开状态,如何强制第二个文档显示 button2 而不是 button1。

4

3 回答 3

0

在文档更改事件期间使功能区失效(刷新)。

private Office.IRibbonUI ribbon;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
Globals.ThisAddIn.Application.DocumentChange += DocumentChangeEvent;
}

private void DocumentChangeEvent()
{
ribbon.Invalidate();
}
于 2015-06-15T13:11:38.070 回答
0

您需要getVisible在自定义 UI 的功能区 XML 标记中定义回调。然后在需要时,您可以通过调用IRibbonUI接口的InvalidateControlInvalidate方法来更新您的控件(实际上是强制 Word 调用您的回调) 。

您可以考虑使用 Application 类的WindowActivateDocumentChange事件来检查功能区控件是否应该更新。如果是这样,请调用 Invalidate* 方法。不要每次都调用这些方法。

若要最大限度地减少对性能的影响,请使用 InvalidateControl 方法而不是 Invalidate 方法,除非您确实需要使外接程序定义的所有自定义控件或菜单​​项无效。调用 Invalidate 会使加载项定义的所有控件和菜单项失效,并且在打开的控件和菜单上发生回调。

在 MSDN 中的以下系列文章中阅读有关 Fluent UI(又名 Ribbon UI)的更多信息:

于 2015-06-23T14:59:30.953 回答
0

您应该使 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();
}
于 2016-06-23T17:35:34.293 回答