[笔记/简译]XAML揭秘(1)

本文介绍了XAML的基础知识,包括其定义、与XML的关系及如何使用XML命名空间。同时,文章详细解释了XAML中元素和属性的概念以及它们与.NET框架的对应关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML 基础

< element xmlns = " http://schema.fancy.com/test " attribute = " value " />

    由于 XAML 实际上是一种特殊的 XML 文档,因此在研究 XAML 之前最好了解 一些 XML 的知识。在上面的 XML 语句中, element 称作元素( element ), xmlns 称作 XML 命名空间( namespace ), attribute 称作 XML 属性( attribute ),包含在一对双引号中部 分,称作值( Value )。需要注意的是,在 .NET 中,属性( property )是指包含 get set 访问器的源代码结构,与 XML 属性( attribute )是两回事。此外, .NET 中也包含称作 attribute 的机制,通常译作“特性”,其与 XML 属性( attribute )也是两回事。

 

XAML 的定义

XAML 是一种相对简单的、具有通用性的、适合构造和初始化 .NET 对象的说明式编程语言。它由处理 XML 规则的解析器 / 编译器以及一些关键字组成,但没有定义任何用于它本身的元素,且不能脱离 .NET 框架使用。 XAML 不一定被用于 WPF ,由于它的通用性,因此可以被用在任何想要使用它的 .NET 技术中,如 WF 。另外,它与程序 代码是相互独立的,并由此实现前端外观和后端逻辑的分离。另外需要注意的是, XAML C# 类似,都是大小写敏感的语言。

 

元素和属性( Attribute

    XAML 规范定义了从 .NET 命名空间、类 型、属性( property )和事件映射到 XML 命名空间、元素 和属性( attribute )的规则。

例: XAML

< Button xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "

Content = " OK " />

       等价的 C# 代码

System.Windows.Controls. Button b = new System.Windows.Controls. Button ();

b.Content = "OK" ;

    XAML 中声明的 XML 元素称作“对象元素“( object element )(上例中为 Button ),它等价于实例化一个相应的 .NET 对象(总是 通过其默认构造方法)。设置对象元素上的 XML 属性( attribute )等价于在程序代码中设置相同名称的对象属性( property ),其中一般 XML 属性称作“对象 元素属性”( property attribute ),事件 XML 属性称作“对象事件属性”( event attribute )。 (此处可能有些乱,须仔细体会)

例: XAML

    < Button xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "

       Content = " OK " Click = " button_click " />

       等价的 C# 代码

System.Windows.Controls. Button b = new System.Windows.Controls. Button ();

b.Click += new System.Windows. RoutedEventHandler (button_click);

b.Content = "OK" ;

    在运行时, XAML 处理属性和事 件的顺序是:( 1 )在对象构造完成之后设置其 Name 属性;( 2 )设置事件处理器(目的是使得对某些属性的设置能够引发合适的事件);( 3 )设置除 Name 属性外的其它属性。

至于多个对象元素属性和对象事件属性的设置,总是与它 们在对象元素上的顺序相同。不过我们不必关心它,因为它由 .NET 设计规范负责解决。

 

命名空间

    前面的例子将 XML 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation (该 URL 实际上并不存在,它可以是任意的字符 串,可参考其它书籍对 XML 命名空间的介绍)映射到了 .NET 命名空间 System.Windows.Controls ,这一映射过程是通过 XmlnsDefinitionAttribute 特性硬编码在 WPF 程序集中的。

    XAML 文件中,根对象元素必须至少指定一个 用来限定它本身及其子元素的 XML 命名空间。当然我们也可以在根元素或子元素上添加额外的 XML 命名空间,但是每一个都必须具有独一无二的前缀用于区分彼此。

例: XAML 文件一般使用前缀为 x 的二级命名空间:

    xmlns ="http://scheams.microsoft.com/winfx/2006/xaml"

    XML 命名空间会映射到 System.Windows.Markup (其中除定义了一些类型之外,还定义了一些用于 XAML 编译器 / 解析器的特殊指令,这些指令通常以 XML 属性的形式出现,它们看起来就像是主元素的属性,但实际上并不是)。

    使用 http://schemas.microsoft.com/winfx/2006/xaml/presentation 作为默认命名空间,使用前缀为 x http://scheams.microsoft.com/winfx/2006/xaml 作为二级命名空间,这不过就是一个习惯,当然我们也可以使用其它任何没有冲突的名称,如:

    < Fancy:Button

       xmlns:Fancy = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "

       Content = " OK " Click = " button_click " />

    WPF 将许多 .NET 命名空间映射到 XML 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation ,如 System.Windows.Controls System.Windows.Data 等。这是一个多对一的映射,因此我们应当避免同名的 XML 命名空间。

WPF 的程序集为 PresentationCore ,其中标记了一些 XmlnsDefinitionAttribute XmlnsPrefixAttribute ,如:

[ assembly: XmlnsDefinition ( "http://schemas.microsoft.com/winfx/2006/xaml" ,

                            "System.Windows.Markup" )]

[ assembly: XmlnsPrefix ( "http://schemas.microsoft.com/winfx/2006/xaml" , "x" )] 前者用于映射命名空间,后者用于设置 XML 前缀。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值