InitializeComponent()是做什么的? 它在 WPF 中是如何工作的?
InitializeComponent()
一般来说,首先,但我特别有兴趣知道血淋淋的细节的建设,以及发生了什么时,有附加属性。
对 InitializeComponent()的调用(通常以至少 Window和 UserControl的缺省构造函数进行调用)实际上是对控件的分部类的方法调用(而不是像我最初预期的那样调用对象层次结构)。
Window
UserControl
此方法为正在加载的 Window/UserControl定位到 XAML 的 URI,并将其传递给 System.Windows.Application.LoadComponent()静态方法。LoadComponent()加载位于传递的 URI 中的 XAML 文件,并将其转换为由 XAML 文件的根元素指定的对象的实例。
System.Windows.Application.LoadComponent()
LoadComponent()
更详细地说,LoadComponent创建 XamlParser的一个实例,并构建 XAML 的树。每个节点由 XamlParser.ProcessXamlNode()解析。这将传递给 BamlRecordWriter类。在此之后的一段时间里,我有点迷失在 BAML 如何转换为对象的问题上,但是这可能足以帮助你在启蒙的道路上。
LoadComponent
XamlParser
XamlParser.ProcessXamlNode()
BamlRecordWriter
注意: 有趣的是,InitializeComponent是 System.Windows.Markup.IComponentConnector接口上的一个方法,其 Window/UserControl在部分生成的类中实现。
InitializeComponent
System.Windows.Markup.IComponentConnector
希望这个能帮上忙!
查看代码也总是有帮助的。也就是说,实际上可以通过执行以下操作查看生成的分部类(调用 负载组件) :
这个 你的班级.g.cs... 是生成的分部类的代码。同样,如果打开它,您可以看到 InitializeComponent 方法以及它如何调用 LoadComponent... 等等。