【问题标题】:Word add-in - ribbonWord 加载项 - 功能区
【发布时间】:2016-06-24 01:35:34
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# vsto office-addins word-addins


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        您应该使 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();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-31
          相关资源
          最近更新 更多