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

8 浏览
0 Comments

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

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

总的来说,我特别想知道构造顺序的细节,以及当存在附加属性时会发生什么。

admin 更改状态以发布 2023年5月24日
0
0 Comments

查看代码也是有帮助的。也就是说,您实际上可以通过以下方法查看生成的局部类(调用LoadComponent):

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

YourClass.g.cs ... 是生成的局部类的代码。同样,如果您打开它,您可以看到 InitializeComponenet 方法以及它如何调用 LoadComponent ... 还有更多。

0
0 Comments

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在生成的子类中实现该接口的部分类。

0