.NET 4.0引入XAML 2009 不面向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團隊對這個功能尤為感興趣。