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