InitializeComponent()是做什么的,它在WPF中是如何工作的?
InitializeComponent()
做什么的,它在WPF中是如何工作的?
一般来说,首先,我会特别想知道施工顺序的细节,当有附加属性的时候会发生什么。
对InitializeComponent()
的调用InitializeComponent()
通常在至lessWindow
和UserControl
的默认构造函数中调用)实际上是调用UserControl
的部分类的方法(而不是象我第一次预期的那样调用对象层次结构)。
此方法find正在加载的Window
/ UserControl
的XAML的URI,并将其传递给System.Windows.Application.LoadComponent()
静态方法。 LoadComponent()
加载位于传入的URI中的XAML文件,并将其转换为由XAML文件的根元素指定的对象的实例。
更详细地说, LoadComponent
创build一个XamlParser
的实例,并构build一个XAML树。 每个节点都由XamlParser.ProcessXamlNode()
进行分析。 这会传递给BamlRecordWriter
类。 在此之后的一段时间,我对BAML如何转化为对象有些遗憾,但这可能足以帮助你走上启蒙的道路。
注意:有趣的是, InitializeComponent
是System.Windows.Markup.IComponentConnector
接口上的一个方法,其中Window
/ UserControl
在部分生成的类中实现。
希望这可以帮助!
看代码总是也有帮助。 也就是说,你可以看看生成的部分类(调用LoadComponent ),方法如下:
- 转到您感兴趣的Visual Studio解决scheme中的“解决scheme资源pipe理器”窗格。
- 在解决scheme资源pipe理器的工具栏中有一个标题为“显示所有文件”的button。 切换该button。
- 现在,展开obj文件夹,然后展开Debug或Release文件夹(或者您正在构build的任何configuration),然后您将看到名为YourClass .g.cs的文件。
YourClass .g.cs …是生成的部分类的代码。 同样,如果你打开它,你可以看到InitializeComponent方法以及它如何调用LoadComponent …以及更多。