65.9K
CodeProject 正在变化。 阅读更多。
Home

XAML 资源

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.46/5 (15投票s)

2004年11月30日

9分钟阅读

viewsIcon

142708

描述当今可用于 XAML/声明式编程的资源

更新

添加了一些关于 Cider 的链接,它是 VS Orcas 的 XAML 可视化设计器(请参阅下面的工具/Microsoft)。

引言

在 11 月 29 日的通讯中,Chris Maunder 提到欢迎任何 XAML 和 Avalon 文章。根据几个月前的一项 CP 调查,似乎至少一半的 CP 用户从未听说过 XAML,或者不知道它是什么。我认为撰写一篇 XAML 资源文章可能会很有用,我将努力使其随着 XAML 的发展而保持最新。像任何突然发现自己成为微软关注焦点的技术一样,通常会引起强烈的情绪反应。XAML 也不例外。在您查阅以下各种资源时,您会遇到三个主要阵营

  • XAML 纯粹主义者,他们认为微软的 XAML 是“唯一”的 XAML
  • “微软偷走了我们的想法”阵营
  • “XAML 意为‘可扩展应用程序标记语言’”,它依靠 XML 作为载体来表示声明式编程结构。

读者应该知道我属于最后一个阵营!尽管如此,我将尽力尽可能公正地从这些角度介绍 XAML 资源。如果有人觉得我冒犯了他们,请告诉我,我会努力纠正。请记住,本文旨在介绍资源。对不同供应商的描述有意简短,无意作为任何特定供应商的广告或认可。

XAML 在技术上是什么?

似乎唯一存在的共识是 XAML 如何作为一种技术来实现。当你试图从描述性的角度获得“XAML 是什么”的明确答案时,你会得到许多不同的答案

您在这里看到的一切都依赖于 XAML 是一种符合 XML 格式的思想,用于描述对象图。在大多数情况下

  • XML 命名空间用于映射到代码命名空间(这非常 .NET 化)
  • XML 元素标签对应于类名
  • XML 元素属性对应于类的属性
  • 通过将集合公开为属性来构建对象图。当节点有子节点(类-集合图)时,隐含一个默认集合,或者必须明确声明(类-集合-类图)
  • 各种实现支持类型为抽象类的属性,引用先前实例化的类,创建复杂的绑定、样式、可视化树等。
  • XAML 是一种声明式编程

术语

您会经常看到(并且已经在这里使用过)一些术语。

声明式编程

声明式编程最简单的定义是它是一组定义应用程序数据和数据关系的指令。相反,命令式编程是告诉应用程序如何操作这些数据的指令集。可以在 Wikipedia 上找到更复杂的定义。

对象图

对象图本质上是一棵树,描述了对象、它们的子对象以及它们的初始属性。考虑一个应用程序,它有一个包含控件集合的表单。每个控件(例如分组框)可能都有自己的一组控件。应用程序还有菜单、工具栏、状态栏等。应用程序还可以为数据库连接、数据集、容器、状态机、消息和事件管理器等创建对象图,当然还有特定于应用程序的类。所有这些类都具有可以初始化的属性。应用程序的类实例树及其属性的整个图景就是对象图。

序列化

序列化是将对象图实例编码为一种格式的过程,该格式允许持久化、可重用、通常可传输,并捕获原始对象图的所有相关含义。XAML 是一种序列化格式,有可能实现跨平台 UI 定义,而不受平台和语言的限制。考虑 Visual Studio 设计器。它将 .NET 窗体“序列化”为 C# 或 VB。这不仅引入了语言依赖性,还引入了对 .NET 类的依赖。

反序列化

反序列化是将编码数据重构为原始对象图实例的过程。尽管 XAML 标签和属性名称基于其底层类,但编写实现这些名称的包装器比尝试将 .NET 移植到另一个平台/语言更容易。此外,XSLT 可用于在不同系统之间转换标签/属性名称,如此处所示。

为什么要使用 XAML?

  • XAML 允许程序员将用户界面 (UI) 定义与底层业务逻辑分离。
  • XAML 由于是解析的,因此提供了一个单一 UI 定义可以在不同平台上使用的可能性
  • XAML 允许用户编辑表示层(不一定是直接编辑,但可以使用简单的工具),而无需通常的开发工具或编程知识。

XAML 如何使用?

XAML 用于基于 Web 和基于客户端的应用程序。在这两个领域中,关于 XAML 的使用有三种观点:

  • 声明式编程 2D 和 3D 矢量图形 (VG)
  • 声明式编程传统(指无 VG)UI 及其控件(或小部件)
  • 作为 UI 和非 UI 构造的通用声明式编程语言

您在这里看到的大部分内容都集中在使用 XAML 来描述用户界面。

谁在使用 XAML?

本节必然会受到很多批评,因为我使用“XAML”一词的广义背景是作为声明式编程的 XML 格式。

关于“Avalon”一词的说明。Avalon 不仅仅是 2D/3D 矢量图形。在本文的上下文中,当我提到“Avalon 命名空间”或“Avalon 克隆”或“部分克隆”时,我特指 Avalon 的 VG 部分,某些供应商已尝试实现该部分,至少在类和属性名称兼容性方面。Avalon 也不是 XAML。XAML 是一种 XML 语言,它通过 Avalon 的类构建对象图。

Laszlo

Laszlo 是一个开源平台,用于使用其“快速 XML 开发”方法开发 Web 应用程序。它不实现 Avalon 命名空间。虽然不直接支持 VG,但 Laszlo 在基于声明式文本的开发环境中,使用 XML 将媒体和交互性集成到网页中。请注意,Laszlo nowhere 不声称或使用“XAML”一词。我将它们包含在这里是因为它们的 XML/声明式基础。

Microsoft

微软的 XAML 拥有 Avalon 2D 和 3D VG 引擎以及对经典 .NET 控件的非 VG 支持。微软通过可视树、复杂绑定等提供了非常丰富的 XAML 体验。微软迄今为止的重点是将其 XAML 应用于用户界面编程。微软的 XAML 文本编辑器支持智能感知(VS2005,可在此处下载)。

Mobiform

Mobiform 已经实现了当前版本 Avalon 命名空间的部分克隆。Mobiform 支持 2D VG 但不支持非 VG 控件。Mobiform 提到他们正在开始支持 3D VG 的工作。Mobiform 对 XAML 的重点似乎主要放在基于 Web 的应用程序上,但似乎也支持 .NET 客户端应用程序。

MyXaml

MyXaml 是一个开源解析器,能够与任何“XAML 友好” .NET 类(包括 Avalon)一起工作,但它不实现 Avalon 的克隆。MyXaml 支持非 VG 控件。2D VG 通过 VG.net(非 Avalon VG 引擎)支持。MyXaml 的重点在于 XAML 作为一种不受 UI 限制的声明式编程语言。当然我可以写更多,但我不会。

Xamlon

Xamlon 已经实现了当前 Avalon 命名空间的部分克隆。Xamlon 支持 2D VG 和非 VG 控件。Xamlon 强调 2D VG。3D 支持显然非常基础。

XUL 社区

XUL 社区主要由基于 Java 的开源实现组成。这里有很多参与者,将 XUL 社区纳入 XAML 资源的范畴肯定会激怒一些纯粹主义者。然而,他们符合我选择支持的通用定义——用于声明式编程的 XML。显然,这些 XUL 引擎不实现 Avalon 克隆,也不实现 VG。由于大多数这些引擎都是用 Java 实现的,因此它们非常适合 Web 开发。有些需要 Swing,而另一些,如 Thinlet,则不需要。

有哪些工具可用?

Laszlo

Laszlo 提供了一个 Laszlo 演示服务器,将 XML 和 JavaScript 编译成 Flash Player 支持的字节码格式。看起来实际的 XML 是使用文本编辑器编辑的。

Microsoft

微软不提供任何设计器,但已发布了 Avalon 的社区技术预览版 (CTP),可在安装了 VS2005 beta 1 的 WinXP SP2 上使用。

更新于 2005 年 1 月 27 日

微软正在开发“Cider”,它是 VS Orcas 中 XAML 可视化设计器的代号。VS Orcas“为开发人员提供支持,以便使用最终发布的 Visual Studio 2005 版本构建 WinFX 应用程序。” 请参阅此处。Cider 的开发人员 Richard Bailey 也建议以下链接:

理查德的博客
第一个 Cider CTP
Cider 论坛

Mobiform

根据他们的网站(这似乎是一个很好的描述):“Mobiform 有一个可视 XML 编辑器 (Aurora),可以生成 XAML 文档……,一个可以读取和渲染 Avalon XAML 文档的浏览器 (Corona),以及用于在 .NET 程序中使用 XAML 和 Avalon 的 .NET 用户控件。” 还有他们 3D 构建器和查看器的 Alpha 版本。

MyXaml

MyXaml 有一个 Visual Studio 插件和一个独立的表单设计器。MyXaml 还提供了一个 Lint 工具来编辑、验证和查看 UI。对于 2D VG,MyXaml 依赖于 VG.net 中功能齐全的 VG 设计器。

Xamlon

Xamlon 有一个 Visual Studio 插件和一个独立的 Xaml-Pad 编辑器,但没有 VG 设计器。

XUL 社区

XUL 社区的设计工具似乎非常稀缺。然而,最近,为 Thinlet 编写了一个名为 ThinG 的 GUI 编辑器

资源

网站

博客

关于微软 XAML 的最佳信息可以在各种博客中找到。如果我遗漏了您,请向您致歉并告诉我您是谁。

其他出版物

结论

希望这能为您介绍当今可用的 XAML 技术。不幸的是,对于您今天应该使用什么,没有明确的答案。这取决于您的目标和目标平台。不过,如果想在稳定版本中使用微软的技术,您可能需要等待一段时间。尽管如此,XAML,更普遍地说是声明式编程的概念,似乎将成为您至少应该了解的一个因素。我将根据反馈和相关信息的可用性更新本文。

© . All rights reserved.