InitializeComponent ()是做什么的,它在 WPF 中是如何工作的?

InitializeComponent()是做什么的? 它在 WPF 中是如何工作的?

一般来说,首先,但我特别有兴趣知道血淋淋的细节的建设,以及发生了什么时,有附加属性。

176743 次浏览

InitializeComponent()的调用(通常以至少 WindowUserControl的缺省构造函数进行调用)实际上是对控件的分部类的方法调用(而不是像我最初预期的那样调用对象层次结构)。

此方法为正在加载的 Window/UserControl定位到 XAML 的 URI,并将其传递给 System.Windows.Application.LoadComponent()静态方法。LoadComponent()加载位于传递的 URI 中的 XAML 文件,并将其转换为由 XAML 文件的根元素指定的对象的实例。

更详细地说,LoadComponent创建 XamlParser的一个实例,并构建 XAML 的树。每个节点由 XamlParser.ProcessXamlNode()解析。这将传递给 BamlRecordWriter类。在此之后的一段时间里,我有点迷失在 BAML 如何转换为对象的问题上,但是这可能足以帮助你在启蒙的道路上。

注意: 有趣的是,InitializeComponentSystem.Windows.Markup.IComponentConnector接口上的一个方法,其 Window/UserControl在部分生成的类中实现。

希望这个能帮上忙!

查看代码也总是有帮助的。也就是说,实际上可以通过执行以下操作查看生成的分部类(调用 负载组件) :

  1. 转到您感兴趣的 VisualStudio 解决方案中的“解决方案资源管理器”窗格。
  2. 在解决方案资源管理器的工具栏中有一个标题为“显示所有文件”的按钮。
  3. 现在,展开 对不起文件夹,然后展开 调试放手文件夹(或正在构建的任何配置) ,您将看到一个名为 你的班级.g.cs 的文件。

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