XAML 是 Extensible Application Markup Language(可扩展应用程序标记语言),一种基于 XML 的声明性标记语言,专用于 .NET 应用 UI 构建,严格遵循 XML 1.0 语法但增加 .NET 类型映射和命名空间约束,所有合法 XAML 都是合法 XML,反之不成立。

XAML 是微软基于 XML 设计的声明性标记语言,专用于构建 .NET 应用程序的用户界面,比如 WPF、UWP 和 .NET MAUI 项目。它不是独立于 XML 的新语言,而是 XML 的一种具体应用形式——所有合法的 XAML 都是合法的 XML,但反过来不成立。
XAML 是什么
全称是 Extensible Application Markup Language(可扩展应用程序标记语言)。它的核心作用是用文本方式描述 UI 结构、资源、数据绑定和事件关联,把界面定义从 C# 或 VB.NET 等后台逻辑中分离出来,支持设计与开发并行协作。
- 每个 XAML 元素通常对应一个 .NET 类(如 Button、Grid),属性直接映射到类的公共属性或事件
- 支持标记扩展(如 {Binding}、{StaticResource})和资源字典,增强表达能力
- 编译后常转为二进制格式 BAML,提升加载性能
- 被 Visual Studio 和 Blend 等工具原生支持,可实时预览和双向编辑
XAML 和 XML 的关系
XAML 严格遵循 XML 1.0 语法规范,属于 XML 的子集,但增加了面向 .NET 应用的语义约束和命名空间约定。
- 所有 XAML 文件必须是格式良好的 XML:有根元素、标签闭合、属性值加引号、区分大小写等
- XML 命名空间在 XAML 中承担关键角色,例如 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 映射 WPF 控件,xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 提供语言级功能(如 x:Class、x:Name)
- XML 本身不规定元素含义,而 XAML 规定了每个元素必须对应某个 .NET 类型,并受 CLR 命名空间和程序集约束
- 纯 XML 文档无法直接被 WPF 解析运行;只有符合 XAML 架构上下文(如类型映射、命名空间解析规则)的 XML 才算有效 XAML
为什么容易混淆二者
因为 XAML 文件看起来就是 XML,但它的“合法性”不仅取决于语法,更取决于运行时能否找到对应的 .NET 类型和程序集。比如写一个
- XML 是通用数据描述语言,跨平台、无类型、无执行语义
- XAML 是特定平台(.NET 生态)的 UI 定义语言,强类型、依赖运行时、具备对象构造能力
- 你可以用 XML 解析器读取 XAML 文件,但不能用它来创建 WPF 窗口——必须用 XAML 加载器(如 XamlReader)或编译流程
简单判断方法
看到一个文件:
- 如果它以 xmlns 声明了 WPF、Xamarin 或 MAUI 的标准命名空间,并使用 Button、TextBox 等控件标签 → 是 XAML
- 如果它只包含自定义标签如
,没有 .NET 类型映射 → 是普通 XML… - 如果它 XML 格式错误(如标签未闭合、属性没引号)→ 既不是合法 XML,也不是合法 XAML







