您能否在编译方面解释XAML文件的生命周期?
当我构建Silverlight项目时,构建过程中的XAML文件会发生什么?
答案 0 :(得分:3)
关于Jon Skeet的中间.g.cs文件的答案(现已删除,但下面引用了上下文的部分)部分正确但未完全回答您的实际问题:
JS:构建过程的早期部分创建了一个Foo.i.g.cs文件 obj目录包含一个部分类,并在其中编译 正常的方式以及你自己的.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并创建一个您创作的元素的可视树。
答案 1 :(得分:0)
当您构建一个Silverlight项目时,会创建一个.xap文件,这基本上只是一个带有另一个扩展名的.zip文件,其中包含一个AppManifest.XAML和一个DLL文件中的项目(以及DLL:s for other)依赖)。
如果您通过dotPeek或Reflector运行DLL,您将看到您创建的XAML文件在dll的资源中完好无损。