InitializeComponent()做什么,它在WPF中如何工作?
-
05-07-2019 - |
题
InitializeComponent()
做了什么,以及它在WPF中是如何工作的?
总的来说,首先,但我特别想知道构造顺序的血腥细节,以及附加属性时会发生什么。
解决方案
对 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
在部分生成的类中实现。
希望这有帮助!
其他提示
查看代码总是有帮助的。也就是说,您可以通过执行以下操作来实际查看生成的部分类(调用 LoadComponent ):
- 转到您感兴趣的Visual Studio解决方案中的“解决方案资源管理器”窗格。
- 解决方案资源管理器的工具栏中有一个标题为“显示所有文件”的按钮。切换该按钮。
- 现在,展开 obj 文件夹,然后展开调试或发布文件夹(或您正在构建的任何配置),您将看到标题为 YourClass .g.cs。 的文件 醇>
YourClass .g.cs ...是生成的分部类的代码。同样,如果你打开它,你可以看到InitializeComponent方法以及它如何调用LoadComponent ......等等。