把界面描述交给标记文件

可扩展应用程序标记语言(Extensible Application Markup Language,XAML)是在微软Windows应用开发中形成的声明式语言。它使用XML形式描述对象、属性及相互关系,典型用途是定义窗口、按钮、文字和布局。程序仍然需要运行框架,但界面结构可以从逐条创建控件的程序代码中分离出来。

2003年10月27日,微软在洛杉矶专业开发者大会上公开展示这项技术。吉姆·奥尔钦把XAML介绍为Longhorn计划的一部分,强调设计人员与开发人员可以分别处理界面外观和后台代码。它所依托的Avalon呈现系统,后来发展为Windows呈现基础(Windows Presentation Foundation,WPF)。

参考:[1] [3] [5]

两种写法指向同一组对象

大会演示中,Windows架构师克里斯·安德森与唐·博克斯先用C#建立窗口,再把部分界面定义移入XAML文件。他们把属性设置改写成标记,同时保留后台代码,并通过构建系统把两类文件组合起来。演示还加入文本框、按钮及点击处理程序,说明标记与程序逻辑如何合作。

这里的关键不是取消编程,而是改变界面对象的表达方式。创建某个按钮,既可以调用类的构造函数、逐一赋值,也可以写出按钮元素及其属性。可视化工具能够读取和生成这种结构化文本,设计人员调整界面时便有了与开发代码衔接的共同文件形式。

参考:[1] [2]

按钮宽度、背景与点击行为

《XAML Developer Reference》用一个宽度为100、背景为浅灰色的按钮作例子。XAML元素指定按钮对象,Width属性给出宽度,元素内容提供按钮上的文字;背景既可以用相应属性表示,也可以用嵌套的属性元素描述。对应C#代码则创建Button对象,并设置Width、Content和Background。

这类标记描述的是对象及其初始状态。若希望点击按钮后计算结果或处理业务数据,还需要把点击事件连接到处理程序。埃斯波西托2004年的技术文章展示了这种分工:页面标记指定控件和事件名称,另一个代码文件实现事件发生后的动作。

文章还用面板包含文本的例子说明对象树。父对象管理布局,子对象提供内容;后台代码可以访问这些对象并改变属性。因此,界面不是一张固定图片,而是一组在运行中仍能被程序操作的对象。

参考:[2] [5]

从早期预览到运行框架

2004年的技术文章基于Longhorn预发布版本,描述了独立标记与带后台代码的应用两种情形。其示例中,只要引用了过程代码,就必须通过构建步骤组合标记和代码文件。元素名称、命名空间与构建方式在后续产品中继续调整,早期示例反映的是当时的开发环境。

2006年11月6日,微软宣布.NET Framework 3.0完成发布制造阶段,并提供下载,其中包括WPF。XAML由此前公开演示的技术方向进入可交付的应用框架。开发者可以利用框架的控件、数据绑定和呈现设施,而不是为每个标记自行实现绘制逻辑。

参考:[2] [3] [5]

2008年文档规定了哪些内容

2008年公开的技术规范进一步把XAML对象映射与具体框架词汇分开。对象映射规定如何从XML结构描述类型和对象层级;WPF词汇规范则列出这个框架允许使用的类型、成员和文本表示。不同框架可以在共同映射办法上定义各自的词汇。

《WPF Xaml Vocabulary Specification 2006》第1.0版标注2008年6月发布。它说明,应把其中的WPF信息项与对象映射规范结合,才能判断某份文档是否属于有效的WPF XAML。文件题名中的2006与版本发布日期2008承担不同含义:前者标识相关词汇版本,后者记录该规范文件的发布。

这些规范让实现者和工具开发者能核对类型是否存在、某个成员怎样赋值,以及文本如何解释,减少仅凭示例猜测语法的空间。它们记录和整理了已经在产品中使用的技术。

参考:[4] [5]

协作方式与版本边界

XAML将布局、样式和资源组织为可由工具处理的声明,使外观修改与业务逻辑更容易分工。控件样式可以被多个界面复用,数据绑定则把运行时数据连接到显示对象;这些能力由相应框架解释并执行。

后来WPF、Silverlight及工作流等技术都使用了XAML,但支持的类型和解析能力并不完全相同。相似的标记文件不能因此假定在所有平台直接通用。其早期发展展示了一条明确路线:先用声明表达对象,再由框架提供行为和呈现,最终以规范说明两者之间的映射。

参考:[4] [5]