引言

WPF框架中已经提到,WPF框架提供XAML基本服务。WPF中XAML的引入向开发者提供UI设计和代码分离的编程型。XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发。本设计所有UI代码都采用XAML。

 

XAML综述

XAML(可扩展应用标记语言的简称,可以称为zammel)是一种被用于.net对象实例的标记语言。尽管XAML是一种可以被应用于不同问题领域的技术,但它最初被设计时是作为WPF的一部分,WPF允许Windows开发人员建设富用户界面。你可以用相同的标准去建设WPF应用程序的用户界面。 
从概念上说,XAML扮演的角色很像HTML,甚至就像是它的近亲,XHTML。XHTML允许你通过定义一些元素来标记一个普通的网页。相似地,XAML允许你定义元素来标记一个XAML的内容区域。操作XHTML元素,你可以用客户端的JavaScript。操作XAML元素,你要写客户端的C#代码。最后,XAML和XHTML共享相同的语法协定。类似XHTML,XAML也是一种基于XML的语言,它包含的元素可以由你的喜好来组织嵌套。 
在本章中,你将得到对XAML的详细介绍,并且写一个简单的单页面程序。一旦你理解了XAML的主要规则,你将明白在WPF用户界面中什么是可能什么是不可能的,并且可以手工修改代码。通过探索XAML文档的标签,你也可以对作为WPF用户界面基础的对象模型了解的更充分,为更深一步的探索做好准备。 

 

XAML特点

XAML是可扩展的,开发人员可以创建自定义的控件、元素和函数来扩展XAML。而且由于XAML各元素在本质上就是WPF类的映射,开发人员可以很轻松地使用面向对象的技术对XAML元素进行扩展。即开发人员可以开发一些自定义控件和组合元素,并将它公开给用户界面设计人员和其它的开发人员使用。 
XAML是一种纯正的、用来描述用户界面构成元件和编排方式的标记语言。尽管有部分的XAML语法具备程序设计语言的特性(例如XAML中的Trigger和Transform),但是XAML并不是一种用于程序设计的语言,它的功能也不是为执行应用程序逻辑。 
XAML是一种解析性的语言,尽管它也可以被编译。微软推荐XAML被编译成二进制语言程序标记语言BAML。XAML和BAML都可以被WPF解析,并且以一种和HTML相似的方式进行界面的呈现。但是和HTML不同的是,XAML是强类型化的,即HTML会忽略那些它不能识别的元素和属性,而XAML必须在识别所有的元素和属性的情况下,才对页面进行呈现。尽管在XAML中各个属性都是以字符串(例如Background)表示,但是这些字符串实际上代表的是WPF中的对象,只有被WPF识别的对象才可以作为元素的属性。 
XAML和WPF类库紧密相关,所有可以在XAML中使用的元素其实都是一个类,例如<Button>元素就与类库中的System.Windows.Control.Button相对应。正是因为上述的继承关系以及XAML中的每个元素均代表一个WPF类,所以XAML也存在一些面向对象体系结构的特性。例如,一个元素从另外的一个XAML元素派生出来,那么该元素将继承其父元素的特性。开发者也可以将自己编写的类用作XAML的元素,正如XAML的中文名称为可扩展应用程序标记语言,任何一个具有公共的无参数的构造函数以及可设置属性的类均可在XAML中使用。

XAML并不是HTML。尽管XAML在元素的声明、程序样式的设置和指定事件处理程序上都和HTML非常类似,但是XAML基于XML,它是WPF的外在表现形式。而HTML主是一种标记语言,仅仅是用来为浏览器呈现页面内容。XAML除用来呈现信息和请求用户输入等基本的功能外,它还包含一些高级的特性,如能提供对动画和3D众多方面的支持。

 

 

实例

 

 

 

结束语

 

XAML是XML的一种方言(dialect),所以理解XML对我们深入学习XAML还是有很大的帮助,我们无需再关注XAML语法上的问题,可以把更多的精力放在WPF的元素上。如果对HTML+CSS技术熟悉的话对WPF的学习更会有很多帮助。

 

更多关于XAML细节,请关注后续基础文章对各个控件的介绍。

 

参考

WPF 中的 XAML

【WPF系列】基础学习-XAML的更多相关文章

  1. [WPF系列]基础学习(一) WPF是什么?

    引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术,   WPF简介 WPF的全称是WindowsPresentationFound ...

  2. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

  3. Node.js系列基础学习----安装,实现Hello World, REPL

    Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...

  4. [WPF系列]-基础系列 Property Trigger, DataTrigger & EventTrigger

    So far, we worked with styles by setting a static value for a specific property. However, using trig ...

  5. [WPF系列]-基础系列 TabControl应用

    引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介     ========================================= ...

  6. [WPF系列]基础Combox

    示例     参考 WPF combobox SelectedValue binding to string Confused with wpf ComboBox DisplayMemberPath, ...

  7. [WPF系列]基础 Listening to Dependency Property change notifications of a given Element

    I want to share this great post from Anoop that shows a easy way to add a notification system to dep ...

  8. [WPF系列]从基础起步学习系列计划

    引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...

  9. 深入浅出WPF-02.WPF系列目录

    WPF系列目录 2. XAML认识 3. XAML语法 4. x名称空间详解 5. 控件与布局 6. 绑定Binding-01 6. 绑定Binding-02 6. 绑定Binding-03 7. 属 ...

随机推荐

  1. C#编程总结--总目录

    C#编程总结--总目录 多年的C#实战经历,希望通过一个系列课程对C#编程做系统总结. 总结过去,展望未来.新的一年,新的征程,新的开始! 希望我们在2014梦想成真,马到成功! 1.C#编程总结(一 ...

  2. Paypal支付小记

    Paypal支付小记 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...

  3. 开源UML工具推荐

    1.StarUML StarUML是一个开源UML项目,可以开发快速,灵活,可扩展,多功能并且免费的UML/MDA平台.此项目运行在Win32平台之上.StarUML项目的目标是成为RationalR ...

  4. Java中从键盘中任意输入字符串,将其转换成数字后,并求和

  5. 企业管理咨询Interview Checklist

    企业管理咨询Interview Checklist 一. 企业战略 1. 您对公司所处行业的看法如何? 2. 请您介绍一下公司的发展历程,主要业务开展状况及核心竞争力.关键成功因素有哪些? 3. 在您 ...

  6. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. Struts2入门(一)——环境搭建和简单例子(Struts2 2.5.2版本)

    一.前言 1.了解三大框架 什么是框架? 框架是一种规范,一种规则,一种把技术组织起来的规则,这就是框架. 什么是三大框架(SSH),Struts.hibernate和spring的作用是什么? St ...

  8. 转载利用伪元素单个颜色实现 hover 和 active 时的明暗变化效果

    1.颜色小tip知识 在背景色上方叠加一个黑色半透明层 rgba(0,0,0,.2) 可以得到一个更暗的颜色 在背景色上方叠加一个白色半透明层 rgba(255,255,255,.2) 可以得到一个更 ...

  9. 谷歌浏览器下载地址 chrome最新版本 百度云地址

    每次下载更新谷歌浏览器是一件很蛋疼的事情.百度搜索"谷歌浏览器下载地址",居然有很多骗子网站,相信有很多不知所以的人中招了.收集了一些chrome的安装包,放在了百度云里面(打不开 ...

  10. React-Native性能优化点

    shouldComponentUpdate 确保组件在渲染之后不需要再更新的,即静态组件,尽量在其中增加shouldComponentUpdate方法,防止二次消耗所产生的性能消耗 shouldCom ...