黑马程序员 XAML概述

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
1.XAML(Extensible Application Markup Language 的简写,发音为“zammle)是用于实例化.NET对象的标记语言。尽管XAML是一种可以应用于不同问题领域的技术,但主要用于构造WPF用户界面。换句话说,XAML文档定义了再WPF应用程序中组成窗口的面板、按钮以及各种控件的布局。
XAML对于WPF不是必须的。但XAML为界面设计师和程序员的合作提供了可能。


2.XAML变体:包括以下几个子集:


WPF XAML包含描述WPF内同的元素,如矢量图形、控件以及文档。目前,他是最重要的XAML应用。


XPS XAML是WPF XAML的一部分,它为格式化的电子文档定义了一种XML表示方式。XPS XAML已经作为单独XML页面规格(XMLPager Specification,XPS)标准发布。




Silverlight XAML是一个用于Silverlight应用程序的WPF XAML子集。Silverlight是一个跨平台的浏览器插件,通过它可以创建具有二位图形、动画音频和视频的富Web内容。


WF XAML包括描述Windows够工作流基础(WF)内容的元素。




3.XAML编译


WPF使用BAML二进制应用程序标记语言编译XAML 来消除XAML的冗长性。




4.XAML基础:


在XAML文档中的所有元素都映射为一个.NET实例。元素的标签名也完全对应于类名。


与所有XML文档一样,可以在一个元素中嵌套另一元素。


可以通过属性-特性的方法设置每个元素的属性。在某些情况下,特性-属性方法不足以完成这一工作。对于这些情况,需要通过特殊的语法使用嵌套的标签——属性-元素方法。


XAML中有三种顶级元素(就是不能嵌套在其他元素中的根元素,同时和XML中的规则一样,一个文档必须只有一个根元素):W
indow元素


Page元素(该元素和Window元素类似,但是它可用于可导航的应用程序)
Application元素(该元素定义应用程序资源和启动设置)




5.XAML名称空间


在XAML文档中元素的标记名代表元素的实际类型,XAML解析器需要知道类位于哪个名称空间。


XAML文档解析名称空间是由XAML解析器完成的,XAML的名称空间的引入和XML的名称空间类似,用属性-特性方法,在一个元素的开始标签中,赋值xmlns属性,正如XML标准中的那样,一旦声明了一个名称空间,可以在标签内部的任何元素中引用该名称空间,默认名称空间不需要用namespace:element格式的引用方法,直接element就表示使用默认名称空间的类型。XAML中的名称空间可以映射到.NET中的多个实际的命名空间中去。例如每个文档都会有的名称空间http://schemas.microsoft.com/winfx/2006.xaml.presentation是WPF核心命名空间(提供了一些重要的 Windows Presentation Foundation (WPF) 基元素类、各种支持 WPF 属性系统和事件逻辑的类以及由 WPF 核心和框架更加广泛使用的其他类型。就是以System.Windows开头的命名空间中的一切类型)。它包含了所有WPF类,包括用于构建用户界面的控件。


http://schemas.microsoft.com/winfx/2006/xaml是XAML名称空间。它包含各种XAML使用特性,这些特性会影响文档的解释方式。这个名称空间被映射为前缀x。


小知识:在windows窗体编程中,窗体中的所有可视化内容都是控件。在WPF中,不再如此。可视化内容被称为元素(element),只有部分元素是控件(控件是哪些能够接收焦点并且能与用户进行交互的元素)。


小知识:命名元素,许多类定义了自己的Name属性(FrameworkElement基类就是一个例子,所有WPF元素都继承此类)。如果在标签中直接用类型的Name属性或使用XAML的标记扩展x:Name为元素定义名称,其效果是一样的。




6.XAML中的属性和事件


在XAML中你可以使用属性-特性赋值方法(简单属性的赋值方法)或使用属性-元素(复杂属性的赋值方法)对元素进行赋值,当然可以使用扩展标记,和附加属性来增加元素的属性数量。也可以为事件进行赋值,但方法名必须和事件的委托签名一致才行。对于含有特殊字符和空白的Content(开始标签和结束标签之间)可以使用字符实体和xml:space=“preserve"进行处理






7.XAML嵌套元素


XAML文档被拍成一棵巨大的嵌套的元素树。


在XAML文档中,由每个元素自身类型的实际定义决定如何处理嵌套的元素。在这种方式下,有三种机制中的一种进行实际处理工作,并且寻找符合自身的处理机制的顺序也是下面列出三种机制的顺序:


1)如果父元素实现了IList接口,解析器就会调用IList.Add()方法,并且为该方法传入子元素作为参数。


2)如果父元素实现了IDictionary接口,解析器就会调用IDictionary.Add()方法,并且为该方法传入子元素作为参数。当使用字典集合时,还必须设置x:Key扩展标记属性以便为每个条目指定一个简明。


3)如果父元素使用ContentPropertyAttribute特性进行了修饰,则解析器使用子元素设置对应的属性。




8.XAML的加载和编译


尽管XAML和WPF是相互补充的技术,但是他们也是相互独立的。因此,完全可以创建不使用XAML的WPF应用程序。


1)只使用代码。这是在visual studio 中为Windows窗体应用程序使用的传统方法。它通过代码语句生成用户界面。


2)使用代码和未编译的标记(XAML)。这种方式对于某些特殊情况是很有意义的,例如创建高度动态化的用户界面。这种方式在运行时使用System.Windows.Markup名称空间中的XamlReader类,从XAML文件中加载部分用户界面。


3)使用代码和编译过的标记(BAML)。对于WPF这是一种更好的方式,并且也是Visual Studio支持的一种方式。这种方式为每个窗口创建一个XAML模版,这个XAML被编译为BAML,并且被嵌入最终的程序集中。在运行时编译过的BAML被提取出来用于重新生成用户界面。


小知识:作为一条经验法则,所有继承自ContentControl类的控件只允许包含单一的嵌套元素。所有继承自ItemsControl类的控件都允许包含一个条目几何,该集合映射为控件的默写部分(例如条目列表或节点数)。所有继承自Panel类的控件都是用于组织多组控件的容器。ContentControl、ItemsControl和Panel基类都使用ContenProterty特性。




---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值