Xamarin.Forms XAML 基础知识
可扩展应用程序标记语言(XAML) 是 Microsoft 创建的一种基于 XML 的语言,作为实例化和初始化对象以及在父子层次结构中组织这些对象的编程代码的替代方案。 XAML 已经能够适应 .NET Framework 中的多种技术,但它在定义 Windows Presentation Foundation (WPF)、Silverlight、Windows 运行时和通用 Windows 平台 (UWP) 中的用户界面布局方面可以发挥最大的实用性。
XAML 允许开发人员使用标记而不是代码在 Xamarin.Forms 应用程序中定义用户界面。 Xamarin.Forms 程序中从来不需要 XAML,但 XAML 通常比等效代码更简洁、视觉上更连贯,并且可能支持各种工具。 XAML 非常适合与流行的 MVVM(模型-视图-视图模型)应用程序体系结构配合使用:XAML 定义通过基于 XAML 的数据绑定链接到视图模型代码的视图。
在 XAML 文件中,Xamarin.Forms 开发人员可以使用所有 Xamarin.Forms 视图、布局和页面以及自定义类来定义用户界面。 XAML 文件可以编译或嵌入到可执行文件中。 无论采用哪种方式,XAML 信息都会在生成时被分析以查找命名对象,在运行时再次分析以实例化和初始化对象,并在这些对象和编程代码之间建立链接。
与等效代码相比,XAML 有多个优势:
- XAML 通常比等效代码更简洁易读。
- XML 固有的父子层次结构使 XAML 能够以更清晰的视觉效果来模拟用户界面对象的父子层次结构。
- XAML 可由程序员轻松手动编写,同时也支持各种工具并由视觉设计工具生成。
但它也有一些缺点,主要与标记语言固有的局限性有关:
- XAML 不能包含代码。 所有事件处理程序必须在代码文件中定义。
- XAML 不能包含用于重复性处理的循环。 (但是,多个 Xamarin.Forms 视觉对象(尤其是
ListView
)可以根据其ItemsSource
集合中的对象生成多个子对象。) - XAML 不能包含条件处理(但是,数据绑定可以引用基于代码的绑定转换器,该转换器有效地允许某些条件处理。)
- XAML 通常无法实例化不定义无参数构造函数的类。 (但是,有时可以摆脱此限制。)
- XAML 通常无法调用方法。 (同样,有时可以克服这种限制。)
目前还没有用于在 Xamarin.Forms 应用程序中生成 XAML 的视觉设计器。 所有 XAML 都必须手动编写,但在编辑屏幕设计时,你可以在 Visual Studio 2019 或 Visual Studio for Mac 中使用 XAML 热重载来查看它们。 即使是在 XAML 方面拥有丰富经验的开发人员也知道试验是有回报的。
XAML 基本上就是 XML,但 XAML 有一些独特的语法特性。 其中最重要的是:
- 属性元素
- 附加属性
- 标记扩展
这些特性不是 XML 扩展。 XAML 是标准的 XML。 但这些 XAML 语法特性以独特的方式使用 XML。 以下文章详细讨论了这种操作,最后介绍了如何使用 XAML 来实现 MVVM。
要求
本文假设读者熟悉 Xamarin.Forms。 本文还假设读者对 XML 有一定的了解,包括了解 XML 命名空间声明的用法以及术语“元素”、“标记”和“属性”。
熟悉 Xamarin.Forms 和 XML 后,请开始阅读第 1 部分:XAML 入门。