天天看點

基于XML的使用者界面标記語言-XUL和XAML(2)

4.XAML 簡述

微軟的XAML是進入XML-GUI競争的新成員,由于微軟對自己産品技術的強力宣傳,還是立即引起了衆多的注意和評論。

由于微軟的Longhorn要等到2006年才釋出,是以XAML也許會在此期間發生比較大的改動。

XAML通過XML的文法,使用微軟新的基于矢量的圖形庫(vector-based drawing library)Avalon。對于Mac程式員來說,Avalon和Apple的Quartz(基于PDF和OpenGL)很相像,而對于linux程式員來說,會覺得這種xml+vectors的組合來自KDE和GNOME的桌面環境。是以可以說,XAML并沒有什麼新的或者獨特的技術。相對新的東西是,原始的XAML檔案可以通過Longhorn版本的IE進行浏覽,這一點和XUL可以通過mozilla浏覽器浏覽有幾分相似。

XAML被用來建立畫布(canvases,一個用來顯示圖像,文字以及widgets的區域)、widgets(比如一個button或者menu)以及shapes(比如圓,直線,貝塞爾曲線等)等的實體,這些元素最初始的外觀通過他們的屬性來定義(就像XUL和SVG一樣),或者使用一個XAML特有的'style'元素(element)來定義。元素的行為可以使用任何.NET相容的語言來定義(目前支援C#, VisualBasic.NET or JScript.NET),有兩種方式可以将行為與界面元素綁定,一種是将行為的定義(代碼)附加在XAML檔案中的CDATA段落中,另外一種是通過一個和W3C的DOM類似的樹狀結構對widget進行通路。

下面的例子是一個XAML檔案的内容,其中包含了C#的代碼,可以看到代碼都在 <def:Code> 标簽中,并且由 <CDATA[...]]> 包圍,這樣解析器便可以在解析XAML檔案時忽略該代碼段。

<Canvas ID="root" xmlns="http://schemas.microsoft.com/2003/xaml"xmlns:def="Definition"> <Button ID="button1" Click="Clicked">Click Me!</Button> <def:Code> <![CDATA void Clicked(object sender, ClickEventArgs args) {Button1.Content = "Hello World"; }]]> </def:Code></Canvas>
              

使用者還可以使用.NET相容的語言定義自己的widgets,并在XAML中進行複用。當使用XAML預定義的元素時,比如菜單,按鈕等,你可以通過兩種方法進行預覽,第一種是對其進行編譯,并像其他windows程式一樣運作;第二種方法是使用Longhorn版的IE進行裝載預覽。

如果你使用C#為widget定義行為,那麼不論這個widget是自己建立的還是XAML預定義的,那麼這個widget必須要進行編譯。也就是說,如果你想在浏覽器之外運作你的XAML widget,那麼必須對XAML進行編譯。

能否通過JScript.NET定義構件行為,進而可以在IE中運作不需編譯的XAML widget,目前還不明确。同樣的,XAML的widget能否嵌入web頁面中,XAML中的元素能否通過ECMAScript 和 DOM編寫腳本,以及能否通過CSS進行樣式控制,目前都不明确。唯一明确的事情是:微軟避開了所有W3C的建議,比如SMIL,SVG以及DOM,而為XAML實作了一些與上述建議相似但不相容的技術。

在Windows程式之外XAML能否獲得成功目前還很難說,Adobe目前為AfterEffects提供了生成XAML的插件,其他廠商是否會跟随,還需要時間的檢驗,但Steve Maine認為XAML将擊敗其他類似的技術,因為最終使用者并不關心平台獨立性。目前看來這種觀點似乎是正确的,大多數使用者并不關心應用程式能否在多種平台上運作,他們隻關心程式能夠在他們的平台上運作。MacOS,Linux以及其他的Unix系統,甚至包括老版本的windows,都不能運作基于XAML UIs的應用程式。根據以前Windows版本的更新情況來看,新版本要想被大多數使用者使用,要經過一個很長的時間,在Longhorn釋出之後,估計還需要大約3年的時間。是以,XAML要想成為WEB技術的擴充,還有很長的路要走。

5.XUL與XAML的對比

通過上面的描述,可以看到微軟的XAML結構是比XUL大的多的,XUL的初始目的是為了建構Mozilla的使用者界面以及面向web的應用程式,它并沒有被設計為一個可以寫出類似Adobe PhotoShop軟體的語言,也就是說,從一開始,XUL面向的便是web領域,是以自然而然地便采用了一系列地web技術,比如CSS和JavaScript。Web開發人員由于對這些技術都比較熟悉,是以轉向XUL技術是比較容易和平滑的。

而對于XAML,這種技術的轉變僅僅影響.NET的開發人員,因為XAML所涉及的幾乎都是.NET的技術,對于web開發人員,這種轉變的面臨着巨大的技術鴻溝,是以要想在web領域使用XAML技術,不可避免存在很多困難。

目前,XAML和XUL的讨論正在網際網路上展開,并且這兩種技術也都在發展的過程當中,是以要想對它們做一個比較完整的對比是比較困難的。下面僅列出目前狀态下,這兩種語言的一個簡單對比,以供參考:

基于XML的使用者界面标記語言-XUL和XAML(2)
6.其他XML GUI項目

目前還有很多XML GUI的項目,例如XWT, Java GUI Builder,用于GTK+ 工具包的Glade(支援GNOME桌面環境),以及支援KDE桌面環境的XML GUI Builder,以及wxWindows的XRC等。

7.參考資源
  • The Joy of XUL,Peter Bojanic

    www.mozilla.org/projects/xul/joy-of-xul.html

  • Introduction to a XUL Document, Dan Matejka

    http://www.mozilla.org/xpfe/xptoolkit/xulintro.html

  • XBL - Extensible Binding Language 1.0, David Hyatt

    http://www.mozilla.org/projects/xbl/xbl.html

  • XBL - XML Binding Language (W3C Note), David Hyatt

    http://www.w3.org/TR/xbl/

  • XUL Overlays, Ian Oeschger and David Hyatt

    http://www.mozilla.org/xpfe/xptoolkit/overlays.html

  • XPCOM Part 1: An introduction to XPCOM, Rick Parrish

    http://www-106.ibm.com/developerworks/webservices/library/co-xpcom.html

  • XPConnect (Scriptable Components), John Bandhauer

    http://www.mozilla.org/scriptable/

  • Creating New Packages for Mozilla, Ian Oeschger

    http://www.mozilla.org/docs/xul/xulnotes/xulnote_packages.html

  • Mozilla Calendar Project Page, maintained by Mike Potter

    http://www.mozilla.org/projects/calendar/

  • A brief history of XAML,Chris Anderson

    http://www.simplegeek.com/commentview.aspx

  • About Creating, Building, Deploying, and Launching Applications, from MSDN

    http://longhorn.msdn.microsoft.com/lhsdk/appcore/overviews/appmodel_life_cycle.aspx

  • Animation in "Avalon", from MSDN

    http://longhorn.msdn.microsoft.com/lhsdk/graphicsmm/overviews/animation1_ovw.aspx

繼續閱讀