2015-08-23 76 views
1

我正在使用Autofac和我的WPF項目。在WPF中設計時間事件?

在某些控件的設計時,我將這些控件的數據上下文設置爲特定於設計器的視圖模型。這個視圖模型然後通過它的構造函數注入一些服務。

這一切都很好。但是我怎樣才能管理這個生命週期範圍?在設計階段完成後,是否有辦法掛鉤事件並處置我的Autofac容器?

+0

你的意思是'設計階段完成'?從本質上講,它是在關閉VisualStudio XAML編輯器時完成的,而且這不會讓你有所作爲,因爲在這個時間點所有組件都將被釋放 – quetzalcoatl

+0

是不是你正在尋找的加載事件? – Sievajet

+0

問題是,我的一些服務(例如熱鍵服務)正在使用'RegisterHotkey' API。對於該服務,當Visual Studio完成我的設計時,重要的是它未註冊。 –

回答

1

你在評論中說:

的問題是,我的一些服務(例如熱鍵服務)使用RegisterHotkey API。對於該服務,當Visual Studio完成我的設計時,重要的是它未註冊。

一般來說,當你的組件在DesignTime中時,它們甚至不應該先註冊。 Designtime如果用於預覽佈局和檢查視圖模式/狀態,而不是真正用於測試(儘管它有時非常誘人)。

在設計時,應禁用組件的所有交互性。 VisualStudio試圖做到這一點,你會注意到許多交互事件/觸發器不會被調用或傳遞給你的組件。但是,它有時會失敗,就像Popups(以及Dropdowns,Comboboxes等)的情況一樣,有時您可能會在設計時強制實際打開它,並且會產生非常奇怪/不穩定/安全的結果。

這就是爲什麼你不應該完全信任VS和設計時模式來「正常工作」。您可能已經很清楚,在設計模式下寫得不好的組件可以嘗試連接到數據庫。它不應該發生。通常。

我想說,當檢測到設計時模式時,重構熱鍵註冊位進入某些服務和存根/取消/禁用它。我懷疑他們在designtime工作,但如果您需要這些熱鍵來打開和關閉虛擬機中的某些開關,或者調用某些行爲,請將這些開關或行爲綁定到一些新屬性,而不是按熱鍵,設置他們在設計師或designtimedata檢查效果。我從來沒有研究過WPF/XAML,但是對於WinForms,每個組件都可以帶有一個特殊的「設計器」組件。 VisualStudio使用該「設計器」組件來編輯,維護,渲染,編輯和序列化編輯的組件。實際上,您可以爲自定義控件編寫一個設計器,並且該設計器可以使用自定義編輯器顯示額外的窗口,等等。 DevExpress等工具包嚴重依賴於此。我不確定是否有類似的XAML組件框架。我懷疑它是相同的,但可能會有一些類似的概念。無論如何,我不會在你的位置挖掘這個,不是爲了這樣的事情。這是不值得的,除非你真的想開始用你的定製插件來擴展Designer。