据我所知,在XAML中完成的所有工作都可以在C#中完成。
为什么XAML是用BAML编译的,而不是C#?在编译时解析XAML并创建相应的C#代码不是更有效吗?
发布于 2009-09-14 20:31:58
这篇博文应该提供一个全面的答案:http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML--BAML-not-IL.aspx
昨天我讲了关于
的演讲,有人问我:为什么要编译成而不是直接编译成IL以获得更好的性能?
在给出正确答案之前,我想解释一下BAML是什么。
处理XAML文件实际上有两种方法:松散或编译。
松散的XAML文件不能包含x:Class XAML关键字,也不能嵌入源代码,也不能以任何方式发出代码。通过调用XamlReader.Load()方法,将返回值转换为根元素,可以加载松散的XAML文件。松散XAML版本提供了一种加载和更改视图的动态方法,但由于XML文件是在运行时解析的,因此性能较差。
例如,编译的XAML文件(BAML)可以通过使用x:Class或注册事件来发出代码。可以通过调用Application.LoadComponent()从BAML内部加载元素,将返回值转换为根元素。编译后的XAML版本提供了更好的性能,因为它是XAML文件的预标记化二进制版本,因此它更小,可以更快地加载,但它不是动态的。
很久很久以前,有CAML。CAML是编译后的XAML文件的确切IL版本。不幸的是,WPF团队已经决定删除它,并保留BAML版本,原因如下:
XBAP非常紧凑,因此下载速度更快(适用于 applications)
编译后可本地化的
归根结底,BAML是一个比IL慢的小,但比CAML有更多的优点。
发布于 2009-09-14 20:31:47
Xaml与C#代码是分开的,因为它允许对这些元素进行“软编码”。如果将Xaml编译成C#代码,就会失去这个特性,因为现在UI元素、数据绑定、事件等都是硬编码到程序中的,您需要重新编译整个程序,以便对用户界面进行细微的更改。
petr k.引用的博客文章说,Xaml实际上是一次性编译成IL的,但现在使用Baml是因为:
即可本地化(不同语言)的
发布于 2014-09-16 06:17:57
从理论上讲,所有的XAML都可以编译成等价的C# (尽管在实践中使用了BAML )。
在http://xamlgenerator.codeplex.com/上查看生成器背后的XAML代码。
这是Visual Studio2010的一个插件,它允许你将XAML编译成等价的C#,了解一下XAML是如何编译成C#的,这真的很有趣。
https://stackoverflow.com/questions/1423728
复制相似问题