破譯微軟Win Vista表示層Avalon之謎
[前言]:本文將先介紹 'Vista'的表示子系統Avalon在圖形處理方面的優勢,然后帶您開始Avalon編程之旅。
Avalon簡介
Avalon是什么?它其實是WinFX的表示子系統,而WinFX則是.NET 2.0 Framework的延伸。Avalon(阿瓦隆)是凱爾特人傳說中的西方樂土島,據說亞瑟王及其部下死后尸體被移往該島。本文的題目'阿瓦隆之迷'實際上借用了馬里恩·齊默·布拉德利(Marion Zimmer Bradley)的一本小說的名字。
Avalon還是紐芬蘭群島的一個半島。最近微軟愛用美洲北太平洋地區的地理名稱作為產品代號。而Longhorn是北美洲范庫弗峰Whistler-Blackcomb 滑雪勝地的一酒吧的名字。Whistler和Blackcomb則分別是XP和Longhorn Server的代號。
WinFX的三大支柱
WinFX的三大支柱分別是Avalon(圖形子系統)、WinFS(存儲子系統)和Indigo(通信子系統)。
Avalon與GDI 的區別在于,前者使用描述性模型來描述各種圖形實體:窗口、網頁、布局面板、向量圖形、可重用控件、動畫、3D對象和景物等,而后者采用過程化的方式。
對象樹
Avalon應用程序的圖形輸出與GDI不同,不是按照過程化指令順序執行的,而是用不同層次的對象及其屬性提供的。Avalon中所有圖形場景都是由Avalon的類模型中不同層次的對象--即對象樹--構成的。
對象樹的一個簡單實例如下:
Avalon的核心是基于圖形向量處理的渲染引擎,它負責解釋對象樹并渲染場景,它能充分發揮顯卡的性能(自由縮放、3D陰影、α混合技術、鏡面反射、動畫、視頻等)。不過我們一步步來,先看看上面的對象樹的輸出結果:
Avalon的類模型除了有幾何圖形,還有各種控件,如edit box、label、button、combo box、check box和list control。不過這些控件都被定義為向量圖形,所以隨意縮放時不會出現鋸齒。
本質上說,用GUI元素創建對象樹,就可以開發出Avalon應用程序的UI(用戶界面)。這時,對象樹常被稱為UI樹。
一個簡單的UI樹例子:
用Avalon渲染引擎渲染之后,輸出結果如下:
由于所有UI元素都是基于向量的,面板可以隨意縮放,控件尺寸也會隨之縮放。我們還可以很方便的修改字體屬性、邊框顏色等屬性。
即便數據綁定也可以用描述性方式進行:您可以將控件與SQL數據庫或RSS feed等數據源聯系起來,當顯示控件時,會自動的從數據源獲得內容,無需編寫任何過程式代碼。
不過創建UI樹只是開發圖形界面的一種方式,此外還可以用XAML。
XAML
XAML(發音為'zammel')是一種基于XML的標記語言,它也可以創建Avalon對象樹。XAML是eXtensible Application Markup Language的簡稱,(XAML中的'A'不是代表'Avalon,而是'應用程序'。這是由于XAML將來不僅用于描述Avalon場景,還可以用于.NET的對象層次結構)。
下面是上述UI樹例子的XAML代碼:
http://schemas.microsoft.com/winfx/avalon/2005 Name='Page1'>
