我有简单的VSTO Excel 2013应用程序级外接程序,其中包含自定义功能区,其中包括切换按钮和复选框。如果我打开两个文件(工作簿),我可以看到Ribbons不会在多个窗口中保留它们的状态,这意味着如果我单击第二个工作簿上的复选框或切换按钮,则第一个工作簿上会显示相同的复选框状态,反之亦然。我发现了一篇描述outlook类似情况的文章:https://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/但遗憾的是,Inspector窗口事件在Excel中不可用。关于如何处理它的任何想法?
答案 0 :(得分:1)
您需要在Ribbon XML中使用回调而不是属性。此外,当用户更改活动窗口时,您需要调用IRibbonUI接口的Invalidate / InvalidateControl方法来强制Office应用程序(在您的情况下为Excel)调用当前控件状态的回调。这很容易......
您可以在MSDN的以下系列文章中阅读有关Ribbon UI(又名Fluent UI)的更多信息:
您也可以找到以下有用的内容:
答案 1 :(得分:1)
我尝试了一个带切换按钮的示例,其中切换打开,然后切换到另一个工作簿,切换按钮不会保留。但是如果你将按下的值存储在一个变量中并在getPressed回调切换按钮时返回它就可以了。
<强> 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;
}