2012-10-22 146 views
2

在我的一些冒煙測試中,我使用​​來解析我的程序集的操作碼。然後,我執行一些操作來驗證代碼質量等。但是,我並不在乎設計人員生成的代碼,因爲我無法做到這一點,所以我將排除InitializeComponent方法。這對WinForms運行正常,但似乎不適用於xaml。換句話說,我仍在處理xaml中的指示(即正在訂閱的事件)。我知道xaml被「編譯」成baml而不是IL,但Mono Cecil顯然仍然能夠從baml獲得OpCodes)。InitializeComponent等效於xaml

我讀herehere,在XAML中,InitializeComponent調用Application.LoadComponent方法,所以我試圖排除爲好,但我仍在處理XAML指令。我特別要檢查事件處理程序訂閱。

我的問題:是否有比編譯或InitializeComponent其他LoadComponent的XAML時被調用的任何其他「引擎蓋下」的方法呢?換句話說,我如何區分來自代碼隱藏(xaml.cs)和xaml的指令?

回答

1

於是,通過MSDN挖掘,我發現this的小寶石。

顯然,IComponentConnector是處理InitializeComponent以及Connect(處理事件訂閱)的東西。所以有一點關於WPF和Winforms的教訓,事件在InitializeComponent中設置。

因此,排除方法是:

System.Windows.Markup.IComponentConnector.Connect();