我在我的Word加载项功能区中创建了两个按钮:button1和button2
当我打开类型1的文档时,我只显示button1 同样的事情,当我打开第二种类型的文档时,我只显示button2。
问题是当我打开第一个文档时,我打开它,然后打开第二个文档后,我总是在功能区中找到button1。即使第一个文档仍处于打开状态,如何强制第二个文档显示button2而不是button1。
答案 0 :(得分:0)
在文档更改事件期间,使功能区无效(刷新)。
private Office.IRibbonUI ribbon;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
Globals.ThisAddIn.Application.DocumentChange += DocumentChangeEvent;
}
private void DocumentChangeEvent()
{
ribbon.Invalidate();
}
答案 1 :(得分:0)
您需要在自定义UI的功能区XML标记中定义getVisible
回调。然后,当需要时,您可以通过调用InvalidateControl界面的Invalidate或IRibbonUI方法来更新您的控件(实际上强制Word调用您的回调)。
您可以考虑使用Application类的WindowActivate或DocumentChange事件来检查功能区控件是否应该更新。如果是这样,请调用Invalidate *方法。不要每次都调用这些方法。
要最小化对性能的影响,请使用InvalidateControl方法而不是Invalidate方法,除非您确实需要使加载项定义的所有自定义控件或菜单项无效。调用Invalidate会使加载项定义的所有控件和菜单项无效,并且在打开的控件和菜单上会发生回调。
在MSDN中的以下系列文章中阅读有关Fluent UI(aka Ribbon UI)的更多信息:
答案 2 :(得分: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();
}