据我所知,在XAML中完成的所有事情都可以在C#中完成.
为什么XAML是用BAML而不是C#编译的?在编译时解析XAML并创建相应的C#代码会不会更有效率?
pet*_* k. 23
这篇博文应该提供一个全面的答案:http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML- 3D00 -BAML-not-IL.aspx
昨天我讲了XAML并提出了以下问题:为什么XAML被编译成BAML而不是直接进入IL以获得更好的性能?
在给出正确答案之前,我想解释一下BAML是什么.
实际上有两种处理XAML文件的方法:Loose或Compiled.
- 松散的XAML文件应该在运行时解析,并且可以作为简单的XML文件部署,本地,远程或嵌入到程序集中.
- Compiled是在Visual Studio中标记为"页面"的XAML文件(在MSBuild中),部署为BAML(二进制应用程序标记语言)文件并作为程序集资源嵌入.
松散的XAML文件不能包含x:Class XAML关键字,也不能嵌入源代码,也不能通过各种方式发出代码.可以通过调用XamlReader.Load()方法加载松散的XAML文件,将返回值强制转换为根元素.松散的XAML版本提供了一种动态加载和更改视图的方法,但由于XML文件在运行时被解析,因此性能较差.
编译的XAML文件(BAML)可以通过使用x:Class或通过注册事件来发出代码.可以通过调用Application.LoadComponent()从BAML内部加载元素,将返回值强制转换为根元素.已编译的XAML版本提供了更好的性能,因为它是XAML文件的预标记化二进制版本,因此它更小并且可以更快地加载,但它不是动态的.
曾几何时,有CAML.CAML是已编译的XAML文件的确切IL版本.不幸的是,WPF团队决定将其删除,并保留BAML版本,原因如下:
- BAML是紧凑的,因此可以更快地下载(适用于XBAP应用程序)
- BAML的安全威胁低于代码执行(适用于XBAP应用程序)
- 编译后可以对BAML进行本地化
在底线,BAML是一个小比IL慢,但具有比CAML更多的优势.
Rob*_*vey 12
Xaml与c#代码分开,因为它允许这些元素被"软编码".如果您将Xaml编译为C#代码,则会破坏此特性,因为现在UI元素,数据绑定,事件等现在已经硬编码到程序中,并且您需要重新编译整个程序以对其进行微小更改用户界面.
博客文章说petr k.引用说Xaml实际上是一次编译成IL,但现在使用Baml是因为: