如何在裝入文檔時啓用Word加載項中的功能區按鈕以及未裝入文檔時是否禁用功能,就像大多數內置文件一樣,在按鈕?VSTO:僅在加載文檔時啓用功能區按鈕
是否可以將全局標誌綁定到按鈕的「已啓用」屬性,還是比這更復雜?我知道我可以創建一個定時循環來檢查Application.Documents中的更改,但如果可能的話,我正在尋找「更乾淨」的東西。
我已經看過Disable Own Word 2007 Add-In If No Document Loaded和其他相關問題。
如何在裝入文檔時啓用Word加載項中的功能區按鈕以及未裝入文檔時是否禁用功能,就像大多數內置文件一樣,在按鈕?VSTO:僅在加載文檔時啓用功能區按鈕
是否可以將全局標誌綁定到按鈕的「已啓用」屬性,還是比這更復雜?我知道我可以創建一個定時循環來檢查Application.Documents中的更改,但如果可能的話,我正在尋找「更乾淨」的東西。
我已經看過Disable Own Word 2007 Add-In If No Document Loaded和其他相關問題。
有幾種方法可以解決這個問題。
首先,您可以創建一個公開公開的函數,該函數針對按鈕的啓用狀態返回true或false(但您要確定),然後定義ribbon xml以指向Enabled屬性getter的該函數。如果你正在處理基於IExtensibility的插件,那麼這是你必須去的方式。
如果您正在處理VSTO,請在功能區設計器中定義您的功能區按鈕,並在默認情況下將其設置爲DISABLED。
然後,在STARTUP事件期間,掛鉤WORD對象,特別是NEWDOCUMENT,DOCUMENTOPEN和WINDOWACTIVATE事件。
在每個事件的事件處理程序代碼中,根據適用情況啓用或禁用您的按鈕,具體取決於當時觸發了哪個事件以及激活了哪個文檔。
看起來好像Ribbon XML比可視化Ribbon設計器更清晰。 –
可能。這兩種方法都有其複雜性。但我只是看,它看起來像你可以使用RibbonXML與VSTO。您不必+使用RibbonDesigner。我以前沒有意識到這一點。 – DarinH
有趣的是,我的VSTO Contrib項目(http://vstocontrib.codeplex.com/documentation)具有一些使色帶管理更簡單的功能。
最簡潔的方法是使用我的功能區工廠,但如果沒有viewmodels查詢按鈕的狀態,項目將需要更新以禁用按鈕。事實上,這是一個我沒有真正涉及的場景。
你有一個加載項感興趣的部分,視圖(窗口),上下文(文檔)和功能區。 VSTO Contrib意味着您可以根據上下文獲得視圖模型,並且它可以管理/提取功能區和視圖,以便每個上下文都顯示一個功能區,並且它會告訴您當前活動視圖(用於顯示相同文檔場景的多個窗口)。 缺少的部分是如果有一個功能區,但沒有上下文和視圖模型,它應該使該功能區控制無效並將其禁用。它應該是一個非常簡單的改變,如果您有興趣將VSTO Contrib的RibbonFactory旋轉一下,我可以給你發電子郵件給我。
改爲使用DocumentChange事件。掛鉤將是這樣的:
Globals.ThisAddIn.Application.DocumentChange += new EventHandler(OnDocumentChange);
而且處理器
void OnDocumentChange()
{
this.myButton.Enabled = wordApp.Documents.Count > 0;
}
感謝@drventure! RibbonXML是要走的路。我仍然缺少一個事件掛鉤。我已經勾選了Activate,Deactivate,New和Open,但如果我關閉了未保存的文檔,並在提升保存更改時單擊「否」,則停用不會啓動。任何想法還有什麼我需要掛鉤? –