2015-05-15 56 views
0

我有簡單的VSTO Excel 2013應用程序級別的加載項與自定義功能區,其中包括切換按鈕和複選框。如果我打開兩個文件(工作簿),我可以看到Ribbons不會保留多個窗口的狀態,這意味着如果我單擊第二個工作簿上的複選框或切換按鈕,則會在第一個工作簿中顯示相同的複選框狀態,反之亦然。我找到了一篇描述Outlook類似情況的文章:https://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/,但不幸Inspector窗口事件在Excel中不可用。有關如何處理它的任何想法?VSTO Excel保留功能區狀態

+1

的討論在這裏https://social.msdn.microsoft.com/Forums/windowsserver/en-US/ a3dade87-1df7-46ec-8876-437194d7553e /如何參考正確的工作簿從一個控制功能區回調?forum = exceldev可能會給你更多關於這個問題的信息。 –

+0

您好,感謝您的鏈接,我發現它已經過去,但根據它沒有喜悅這個問題:)希望能找到一個解決方法這個問題 – Jim

+0

我提出了另一種簡單的解決方案在這裏: HTTP://計算器.COM /問題/ 23418686/EXCEL-2013-VSTO絲帶 - 編輯控件/ 33153525#33153525 – Malick

回答

1

您需要在Ribbon XML中使用回調而不是屬性。另外,當用戶更改活動窗口時,您需要調用IRibbonUI界面的Invalidate/InvalidateControl方法來強制Office應用程序(在您的情況下爲Excel)調用您的回調以獲取控件的當前狀態。這是很容易...

您可以在MSDN中的以下系列文章閱讀更多有關的Ribbon UI(又名流利UI):

另外您可能會發現以下幾條有用:

+0

尤金你好,我看到你的答案之前,但是我已經在設計器中創建一個功能區,除非我是完全錯誤的問題與更多的是In-Active而不是Active窗口。特別是當活動窗口功能區狀態發生更改時,它也反映在In-Active窗口中。如果它不是很大的麻煩你能否在這裏放幾行,因爲這是常見的問題,並會幫助所有的插件開發。謝謝 – Jim

+0

似乎我需要在博客文章中詳細描述它......沒有辦法更新功能區控件的非活動狀態。你無法控制。唯一可能的方法是在切換到另一個/本工作簿時使用回調。 –

+0

我明白了,所以基本上我們都遇到了這個問題,我確實在活動窗口功能區狀態下有適當的激活和啓用狀態,所以問題更像是一個化妝品功能。 – Jim

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