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 ):

  1. 转到您感兴趣的Visual Studio解决方案中的“解决方案资源管理器”窗格。
  2. 解决方案资源管理器的工具栏中有一个标题为“显示所有文件”的按钮。切换该按钮。
  3. 现在,展开 obj 文件夹,然后展开调试发布文件夹(或您正在构建的任何配置),您将看到标题为 YourClass .g.cs。
  4. 的文件

    YourClass .g.cs ...是生成的分部类的代码。同样,如果你打开它,你可以看到InitializeComponent方法以及它如何调用LoadComponent ......等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top