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):
YourClass.g.cs ...是生成的部分类的代码。同样,如果您打开它,您可以看到InitializeComponent方法及其如何调用LoadComponent...以及更多内容。