首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么XAML被编译成BAML而不是C#

为什么XAML被编译成BAML而不是C#
EN

Stack Overflow用户
提问于 2009-09-14 20:26:47
回答 3查看 14.3K关注 0票数 31

据我所知,在XAML中完成的所有工作都可以在C#中完成。

为什么XAML是用BAML编译的,而不是C#?在编译时解析XAML并创建相应的C#代码不是更有效吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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文件实际上有两种方法:松散或编译。

  1. 松散的XAML文件应该在运行时解析,并且可以作为简单的XML文件进行部署,本地、远程或嵌入到assembly.
  2. Compiled中的是在Visual Studio (在MSBuild中)中标记为“页面”的XAML文件,部署为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版本,原因如下:

XBAP非常紧凑,因此下载速度更快(适用于 applications)

  1. BAML安全威胁小于代码执行)(适用于

编译后可本地化的

  1. BAML

归根结底,BAML是一个比IL慢的,但比CAML有更多的优点。

票数 26
EN

Stack Overflow用户

发布于 2009-09-14 20:31:47

Xaml与C#代码是分开的,因为它允许对这些元素进行“软编码”。如果将Xaml编译成C#代码,就会失去这个特性,因为现在UI元素、数据绑定、事件等都是硬编码到程序中的,您需要重新编译整个程序,以便对用户界面进行细微的更改。

petr k.引用的博客文章说,Xaml实际上是一次性编译成IL的,但现在使用Baml是因为:

  1. It更安全(不能直接执行),并且无需recompilation.

即可本地化(不同语言)的

  • Baml
票数 15
EN

Stack Overflow用户

发布于 2014-09-16 06:17:57

从理论上讲,所有的XAML都可以编译成等价的C# (尽管在实践中使用了BAML )。

http://xamlgenerator.codeplex.com/上查看生成器背后的XAML代码。

这是Visual Studio2010的一个插件,它允许你将XAML编译成等价的C#,了解一下XAML是如何编译成C#的,这真的很有趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1423728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档