【WPF系列】基础学习-XAML
引言
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系列]基础学习(一) WPF是什么?
引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术, WPF简介 WPF的全称是WindowsPresentationFound ...
- Node.js系列基础学习-----回调函数,异步
Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...
- Node.js系列基础学习----安装,实现Hello World, REPL
Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...
- [WPF系列]-基础系列 Property Trigger, DataTrigger & EventTrigger
So far, we worked with styles by setting a static value for a specific property. However, using trig ...
- [WPF系列]-基础系列 TabControl应用
引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介 ========================================= ...
- [WPF系列]基础Combox
示例 参考 WPF combobox SelectedValue binding to string Confused with wpf ComboBox DisplayMemberPath, ...
- [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 ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- 深入浅出WPF-02.WPF系列目录
WPF系列目录 2. XAML认识 3. XAML语法 4. x名称空间详解 5. 控件与布局 6. 绑定Binding-01 6. 绑定Binding-02 6. 绑定Binding-03 7. 属 ...
随机推荐
- 学C++的经验总结
下面的是学C++时要注意的. 1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<T ...
- a标签有小手状和无小手状css属性
有小手状: <a href="##" title="2" style="cursor:pointer"> 无小手状: <a ...
- mybatis 中的where标签
mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...
- swoole_redis 记一次看文档不仔细做警醒
测试代码 $redisClass = new Redis(); $redisClass->connect('127.0.0.1', 6379, 1); $result = $redisClass ...
- Javascript:JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于ECMAScript的一个子集,采用完全独立于语言的文本格式.这些特性使JSON成为理想的数据交换 ...
- [ASP.NET Core] Middleware
前言 本篇文章介绍ASP.NET Core里,用来处理HTTP封包的Middleware,为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 结构 在ASP.NET Core ...
- JS实现自适应宽度的Tag切换
效果体验:http://hovertree.com/texiao/js/3.htm 该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页. ...
- 原生JS:Function对象(apply、call、bind)详解
Function对象(apply.call.bind) 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5850180.html 本文参考MDN做的 ...
- iOS BUG: Unbalanced calls to begin/end appearance transitions for <XXXViewController: 0x7fcea3730650>.
自定义TabBarController Push下一级Controller时 会报这样的错误:Unbalanced calls to begin/end appearance transitions ...
- iOS开发-UI 从入门到精通(五)
近日在做项目的时候,为了快捷适配屏幕采用了Storyboard,添加约束以后运行后发现一个问题(下面将以普通案例展示该问题);在4.7 甚至更大的屏幕下是没有问题的,如下图(4.7屏幕): 但是放到更 ...