InitializeComponent()
是做什麼的,它在WPF中如何工作?InitializeComponent()是做什麼的,它在WPF中如何工作?
一般來說,首先,我會特別想知道構造順序的血淋淋的細節,以及當有附加屬性時會發生什麼。
InitializeComponent()
是做什麼的,它在WPF中如何工作?InitializeComponent()是做什麼的,它在WPF中如何工作?
一般來說,首先,我會特別想知道構造順序的血淋淋的細節,以及當有附加屬性時會發生什麼。
到InitializeComponent()
呼叫(其通常被稱爲中的至少Window
和UserControl
默認構造)實際上是一個方法調用,以局部類的控制(而不是呼叫了對象分層結構作爲我第一預期)的。
此方法找到正在加載的Window
/UserControl
的XAML的URI,並將其傳遞給靜態方法System.Windows.Application.LoadComponent()
。 LoadComponent()
加載位於傳入的URI中的XAML文件,並將其轉換爲由XAML文件的根元素指定的對象的實例。
更詳細地說,LoadComponent
創建了XamlParser
的一個實例,並構建了XAML樹。每個節點由XamlParser.ProcessXamlNode()
解析。這會傳遞給BamlRecordWriter
類。在此之後的一段時間,我對BAML如何轉化爲對象感到有些迷茫,但這可能足以幫助您走上啓蒙之路。
注:有趣的是,InitializeComponent
是System.Windows.Markup.IComponentConnector
接口,其中Window
/UserControl
在局部生成的類上實現的方法。
希望這會有所幫助!
查看代碼總是有幫助。也就是說,你其實可以看看生成的部分類(也稱LoadComponent)通過執行以下操作:
The YourClass .g.cs ...是生成的部分類的代碼。同樣,如果你打開它,你可以看到InitializeComponent方法以及它如何調用LoadComponent ...以及更多。
謝謝,我認爲這些都是相當不錯的答案!沒有人準確地提到了AttachedProperties,但現在我知道Xaml中的任何AttachedProperties都是作爲Xaml解析的一部分創建的,所以它們不值得特別提及。 – 2009-10-21 17:13:44