繁体   English   中英

VSTO Excel保留功能区状态

[英]VSTO Excel preserve Ribbon state

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

您需要使用回调代替Ribbon XML中的属性。 同样,当用户更改活动窗口时,您需要调用IRibbonUI界面的Invalidate / InvalidateControl方法来强制Office应用程序(在您的情况下为Excel)为控件的当前状态调用回调。 很简单

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

另外,您可能会发现以下帮助:

我尝试了一个带有启用了切换的切换按钮的示例,然后切换到另一个工作簿,该切换按钮不持久。 但是,如果您将按下的值存储在变量中,并在切换按钮的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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM