VSTO Excel保留function区状态

我有简单的VSTO Excel 2013应用程序级别的加载项自定义function区,其中包括切换button和checkbox。 如果我打开两个文件(工作簿),我可以看到Ribbons不会保留多个窗口的状态,这意味着如果我点击第二个工作簿上的checkbox或切换button,第一个工作簿上将显示相同的checkbox状态,反之亦然。 我find了一篇文章,描述了一个类似于outlook的情况: https ://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/在Excel中检查器窗口事件不可用。 任何想法如何处理?

您需要在Ribbon XML中使用callback而不是属性。 当用户更改活动窗口时,您需要调用IRibbonUI界面的Invalidate / InvalidateControl方法来强制Office应用程序(在您的情况下为Excel)调用您的callback来获取控件的当前状态。 这很容易…

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

  • 为开发人员定制2007 Office Fluentfunction区(第1部分,共3部分)
  • 为开发人员定制2007 Office Fluentfunction区(2/3)
  • 为开发人员定制2007 Office Fluentfunction区(3部分)

另外你可能会发现以下的帮助:

  • 第11章:创builddynamicfunction区自定义(1/2)
  • 第11章:创builddynamicfunction区自定义(2/2)

我尝试了一个开关切换button的示例,然后切换到另一个工作簿切换button不会持续。 但是,如果您将按下的值存储在一个variables中,并返回一个开关buttongetPressedcallback它的工作。

Ribbon.xml

<?xml version="1.0" encoding="UTF-8"?> <customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabAddIns"> <group id="group1" label="group1"> <toggleButton id="toggleButton1" label="toggleButton1" size="large" getPressed="buttonPressed" onAction="buttonAction"/> </group> </tab> </tabs> </ribbon> </customUI> 

Ribbon.cs

 private bool isButtonPressed = false; public void buttonAction(Office.IRibbonControl control, bool isPressed) { isButtonPressed = isPressed; } public bool buttonPressed(Office.IRibbonControl control) { return isButtonPressed; }