C# 要保留功能区状态,请使用VSF
我有一个简单的VSTO Excel 2013应用程序级外接程序,带有自定义功能区,其中包括切换按钮和复选框。如果我打开两个文件(工作簿),我可以看到功能区不会在多个窗口中保持其状态,这意味着如果我在第二个工作簿上单击复选框或切换按钮,第一个工作簿上会显示相同的复选框状态,反之亦然。我发现一篇文章描述了outlook的类似情况:但不幸的是,Excel中没有Inspector窗口事件。您知道如何处理它吗?您需要在功能区XML中使用回调而不是属性。此外,当用户更改活动窗口时,您需要调用界面的Invalidate/InvalidateControl方法,以强制Office应用程序(在您的示例中为Excel)为控件的当前状态调用回调。这很简单 在MSDN的以下系列文章中,您可以阅读有关Ribbon UI(也称为Fluent UI)的更多信息:C# 要保留功能区状态,请使用VSF,c#,excel,vsto,excel-2013,C#,Excel,Vsto,Excel 2013,我有一个简单的VSTO Excel 2013应用程序级外接程序,带有自定义功能区,其中包括切换按钮和复选框。如果我打开两个文件(工作簿),我可以看到功能区不会在多个窗口中保持其状态,这意味着如果我在第二个工作簿上单击复选框或切换按钮,第一个工作簿上会显示相同的复选框状态,反之亦然。我发现一篇文章描述了outlook的类似情况:但不幸的是,Excel中没有Inspector窗口事件。您知道如何处理它吗?您需要在功能区XML中使用回调而不是属性。此外,当用户更改活动窗口时,您需要调用界面的Inval
<?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>
这里的讨论可能会为您提供有关此问题的更多信息。您好,感谢我之前找到的链接,但根据它,此问题没有任何乐趣:)希望找到解决此问题的方法我在这里提出了另一个简单的解决方案:您好Eugene,我以前看到过您的答案,然而,我已经在Designer中创建了一个功能区,除非我完全错了,否则这个问题更多地与“活动”窗口相关,而不是与“活动”窗口相关。在特定情况下,当活动窗口功能区状态更改时,它也会反映在活动窗口中的。如果这不是一个大问题,你可以把几行在这里,因为这是常见的问题,将有助于所有的插件开发人员。ThanksIt似乎我需要在一篇博文中深入描述它。。。无法更新处于活动状态的功能区控件。你无法控制。唯一可能的方法是在切换到另一个/此工作簿时使用回调。我明白了,所以基本上我们都被这个问题困住了。我确实在活动窗口功能区状态上有正确的激活和启用状态,所以这个问题更像是一个装饰性的问题,而不是功能性的问题。是的,在2013年之前的版本中,这很好,因为我们没有伪SDI。然而,在2013年,人们感觉每个窗口都是纯SDI,这看起来是不可接受的。事实上,办公室决定何时召回。你可以在需要的时候提出要求。
private bool isButtonPressed = false;
public void buttonAction(Office.IRibbonControl control, bool isPressed)
{
isButtonPressed = isPressed;
}
public bool buttonPressed(Office.IRibbonControl control)
{
return isButtonPressed;
}