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