.NET 4.0引入XAML 2009 不面向WPF用户

开发 后端
在PDC 2009上,Michael Shim和Rob Relyea介绍了微软对XAML的未来规划。目前.NET中有两个XAML实现,一个针对Windows Workflow,另一个针对Windows Workflow,因此想要使用XAML的开发者需要WF或是WPF。

在.NET 4中,微软于新的System.XAML程序库中加入了一个独立的XAML引擎。该版本只需System.XML与核心运行时即可,这对于那些想要使用XAML但又不想加载Fx程序库的应用来说再适合不过了。

#T#

微软对 .NET 4中的XAML Nodes Streams进行了大幅度的提升。所谓node stream其实就是一个事件驱动的API,用于与结构化数据协同工作。读者可能对基于XML的SAX风格的程序库比较熟悉。除了直接处理之外,在其他框架加载XAML Node Streams时它还可以修改XAML。

作为.NET 4重构的一部分,微软极大地提升了解析器的可扩展性。在.NET 3中,扩展点仅仅局限于IXamlTypeResolver、IUriConext和IProvideValueTarget。新的解析器可以通过这些接口注入很多其他的服务。但这些接口并非都是新引入的,只是此前没有公开而已,他们是:

IRootObjectProvider
IXamlNameResolver
IXamlNameProvider
IAmbientProviders
IDestinationTypeProvider
IXamlNamespaceProvider
INamespacePrefixLookup
IXamlSchemaContextProvider
IXamlObjectWriterFactory
就像XML一样,XAML也有两类解析API。除了XAML Node Streams之外,还将有一个XAML DOM。凭借XAML Document Object Model,开发者可以一次性处理整个XAML树。开发者不仅可以直接处理节点树,还能够访问LINQ provider。我们可以联合使用XAML Node Streams和XAML DOM解析器为静态分析工具如FxCOP增加支持。

到目前为止,我们仅仅谈到了解析工具,实际上微软还发布了语言的一个新版本,叫做XAML 2009。XAML 2009将完全支持泛型、非默认构造方法、工厂方法、内建类型并且可以定义新的属性。

需要注意的是 .NET 4、VS 2010和Blend中的编译器与设计器将不会在此次发布中支持XAML 2009。XAML 2009只能用于“loose XAML”,比如Workflow Foundation所用的小个配置文件。其中的主要原因在于WPF设计器已经拥有了自己的解析器,而重写该解析器以使用这个公共解析器将要花费大量时间。

Silverlight将与.NET生态圈中的其余部分使用同样的XAML解析器。这么做是考虑到更好的错误检测以及未来对更多的XAML 2006和2009特性的支持。Silverlight依然需要一个轻量级的运行时,因此微软采取逐步递进而不是大跃进的方式来增加特性。

到底通过什么可以让Silverlight使用统一的XAML解析器呢?答案就是之前提到的IXamlSchemaContextProvider。通过创建一个Silverlight可以接受的特定于XAML子集的一个schema context,工具就无需对Silverlight和基于WPF的XAML之间的差别进行硬编码了。据说Expression Blend团队对这个功能尤为感兴趣。

责任编辑:彭凡 来源: InfoQ
相关推荐

2011-09-05 11:04:25

Ubuntu 11.1LightDM

2009-04-27 12:26:45

AMD单核Nehalem

2015-03-18 14:02:25

生物识别认证Windows10

2023-03-20 21:44:10

微软GPT-4AI

2021-07-24 13:20:40

iOS应用系统

2022-01-24 16:06:58

Linux 5.17RTLA工具

2009-12-25 16:05:24

WPF 4.0特点

2009-09-18 12:15:53

GoogleChrome 3.0HTML 5

2018-03-09 10:19:09

Windows 10安装包GitHub

2023-03-30 09:59:43

2015-02-04 10:49:13

Visual C++C++Windows API

2022-06-19 23:32:54

Windows 11隐私仪表板安全

2021-10-02 10:24:35

Android端Firefox 93密码

2010-01-22 09:52:32

JPA 2.0Java EE 6

2009-12-22 09:57:36

Java EE 6RESTfulJAX-RS

2013-07-01 13:41:09

iOS7WWDC姿势控制

2012-01-05 10:30:18

微软Windows 8

2009-08-03 09:21:35

.NET 4.0 Be.NET

2021-07-13 15:21:19

MozillaFirefox 90攻击

2017-12-25 16:51:34

Windows
点赞
收藏

51CTO技术栈公众号