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文件时忽略该代码段。
用户还可以使用.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的讨论正在互联网上展开,并且这两种技术也都在发展的过程当中,因此要想对它们做一个比较完整的对比是比较困难的。下面仅列出当前状态下,这两种语言的一个简单对比,以供参考:
6.其他XML GUI项目
目前还有很多XML GUI的项目,例如XWT, Java GUI Builder,用于GTK+ 工具包的Glade(支持GNOME桌面环境),以及支持KDE桌面环境的XML GUI Builder,以及wxWindows的XRC等。
7.参考资源
微软的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的讨论正在互联网上展开,并且这两种技术也都在发展的过程当中,因此要想对它们做一个比较完整的对比是比较困难的。下面仅列出当前状态下,这两种语言的一个简单对比,以供参考:

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