.NET 4.0引入XAML 2009 不面向WPF用戶
在.NET 4中,微軟于新的System.XAML程序庫中加入了一個獨立的XAML引擎。該版本只需System.XML與核心運行時即可,這對于那些想要使用XAML但又不想加載Fx程序庫的應用來說再適合不過了。
#T#
微軟對 .NET 4中的XAML Nodes Streams進行了大幅度的提升。所謂node stream其實就是一個事件驅動的API,用于與結構化數(shù)據(jù)協(xié)同工作。讀者可能對基于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,開發(fā)者可以一次性處理整個XAML樹。開發(fā)者不僅可以直接處理節(jié)點樹,還能夠訪問LINQ provider。我們可以聯(lián)合使用XAML Node Streams和XAML DOM解析器為靜態(tài)分析工具如FxCOP增加支持。
到目前為止,我們僅僅談到了解析工具,實際上微軟還發(fā)布了語言的一個新版本,叫做XAML 2009。XAML 2009將完全支持泛型、非默認構造方法、工廠方法、內(nèi)建類型并且可以定義新的屬性。
需要注意的是 .NET 4、VS 2010和Blend中的編譯器與設計器將不會在此次發(fā)布中支持XAML 2009。XAML 2009只能用于“l(fā)oose XAML”,比如Workflow Foundation所用的小個配置文件。其中的主要原因在于WPF設計器已經(jīng)擁有了自己的解析器,而重寫該解析器以使用這個公共解析器將要花費大量時間。
Silverlight將與.NET生態(tài)圈中的其余部分使用同樣的XAML解析器。這么做是考慮到更好的錯誤檢測以及未來對更多的XAML 2006和2009特性的支持。Silverlight依然需要一個輕量級的運行時,因此微軟采取逐步遞進而不是大躍進的方式來增加特性。
到底通過什么可以讓Silverlight使用統(tǒng)一的XAML解析器呢?答案就是之前提到的IXamlSchemaContextProvider。通過創(chuàng)建一個Silverlight可以接受的特定于XAML子集的一個schema context,工具就無需對Silverlight和基于WPF的XAML之間的差別進行硬編碼了。據(jù)說Expression Blend團隊對這個功能尤為感興趣。