VSTO Excel保留功能区状态

时间:2015-05-15 11:40:51

标签: c# excel vsto excel-2013

我有简单的VSTO Excel 2013应用程序级外接程序,其中包含自定义功能区,其中包括切换按钮和复选框。如果我打开两个文件(工作簿),我可以看到Ribbons不会在多个窗口中保留它们的状态,这意味着如果我单击第二个工作簿上的复选框或切换按钮,则第一个工作簿上会显示相同的复选框状态,反之亦然。我发现了一篇描述outlook类似情况的文章:https://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/但遗憾的是,Inspector窗口事件在Excel中不可用。关于如何处理它的任何想法?

2 个答案:

答案 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;
    }