破译微软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 。不过这些控件都被定义为向量图形,所以随意缩放时不会出现锯齿 。
【破译微软Win Vista表示层Avalon之谜】本质上说,用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">

    推荐阅读