您能否从编译的角度解释 XAML 文件的生命周期?
当我构建 Silverlight 项目时,XAML 文件在构建过程中会发生什么?
Jon Skeet 关于中间 .g.cs 文件的答案(现已删除,但下面引用的那部分内容)部分正确,但没有完整回答您的实际问题:
JS:构建过程的早期部分在 obj 目录中创建一个 Foo.igcs 文件,其中包含一个部分类,并以正常方式与您自己的 .cs 文件一起编译。
.g.cs 文件包含在InitialiseComponent()
. 例如,这是来自基本的 MainPage.g.cs:
public void InitializeComponent() {
...
System.Windows.Application.LoadComponent(this, new System.Uri("/SilverlightApp1;component/MainPage.xaml", System.UriKind.Relative));
this.LayoutRoot = ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
}
这有点像为 WinForms 控件/对话框生成的设计器文件,但发生在编译时而不是设计时。
"/SilverlightApp1;component/MainPage.xaml"
)回答您对 Jon Skeet 的评论(现已删除),您的提问部分正确:
那么解析整个 XAML 文档——所有元素、属性等——不是 WPF 或 SL 构建的一部分吗?我对么?
除了上面提到的解析之外,对于验证和命名元素,其余的解析(元素树和模板等)实际上是在运行时LoadComponent()
有效地反序列化 XAML 并创建您创作的元素的可视化树时完成的。
当您构建 Silverlight 项目时,会创建一个 .xap 文件,这基本上只是一个带有另一个扩展名的 .zip 文件,其中包含一个 AppManifest.XAML 和您的项目在一个 DLL 文件中(连同 DLL:s 用于其他依赖项)。
如果您通过 dotPeek 或 Reflector 运行 DLL,您将看到您创建的 XAML 文件在 dll 的资源中完好无损。