[笔记/简译]XAML揭秘(1)
来源:互联网 发布:java用qq邮箱发送邮件 编辑:程序博客网 时间:2024/04/29 04:20
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前缀。)
- [笔记/简译]XAML揭秘(1)
- [笔记/简译]XAML揭秘(1)
- [笔记/简译]XAML揭秘(2)
- [笔记/简译]XAML揭秘(3)
- [笔记/简译]XAML揭秘(4)
- [笔记/简译]XAML揭秘(5)
- [笔记/简译]XAML揭秘(6)
- [笔记/简译]XAML揭秘(8)
- [笔记/简译]XAML揭秘(2)
- [笔记/简译]XAML揭秘(3)
- [笔记/简译]XAML揭秘(4)
- [笔记/简译]XAML揭秘(6)
- [笔记/简译]XAML揭秘(8)
- XAML揭秘
- XAML揭秘
- WPF笔记1-App.xaml & MainWindow.xaml
- XAML学习笔记1
- WPF学习笔记1:XAML之NameSpace
- JTable纵向表头,JTable表头纵向排列
- SQL基础
- 《魔兽世界:巫妖王之怒》海豹人新截图
- cannot add new member in VC++
- 面试的感受
- [笔记/简译]XAML揭秘(1)
- 丁家宜 男士爽肤露
- Maemo Linux手机平台系列分析:(14) Maemo平台开发之 设计D-Bus server时要注意的若干问题
- document类的用法归总
- Load 3D Model in OpenGL
- [笔记/简译]XAML揭秘(2)
- windows service 程序
- Ext笔记
- 黑客攻防技巧:2分钟入侵网站全程实录