InitializeComponent()
做了什么,以及它如何在WPF中起作用?
总的来说,首先,但我特别想知道构造顺序的血腥细节,以及附加属性时会发生什么。
答案 0 :(得分:147)
对InitializeComponent()
的调用(通常在默认构造函数中至少调用Window
和UserControl
)实际上是对控件的partial类的方法调用(而不是按照我的预期调用对象层次结构。)
此方法将URI加载到正在加载的Window
/ UserControl
的XAML,并将其传递给System.Windows.Application.LoadComponent()
静态方法。 LoadComponent()
加载位于传入的URI中的XAML文件,并将其转换为由XAML文件的根元素指定的对象的实例。
更详细地说,LoadComponent
创建了XamlParser
的实例,并构建了XAML的树。每个节点都由XamlParser.ProcessXamlNode()
解析。这将传递给BamlRecordWriter
类。在此之后的一段时间,我对BAML如何转换为对象感到有点迷失,但这可能足以帮助你走上启蒙之路。
注意:有趣的是,InitializeComponent
是System.Windows.Markup.IComponentConnector
接口上的一种方法,Window
/ UserControl
在部分生成的类中实现。
希望这有帮助!
答案 1 :(得分:22)
查看代码总是有帮助的。也就是说,您可以通过执行以下操作来实际查看生成的部分类(调用 LoadComponent ):
YourClass .g.cs ...是生成的分部类的代码。同样,如果你打开它,你可以看到InitializeComponent方法以及它如何调用LoadComponent ......等等。