【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. 属 ...
随机推荐
- MS SQLServer的关键词BETWEEN的一些注意事项
近段时间在程序中写到有关搜索的功能.其中有使用到MS SQLServer的关键词BETWEEN,它是搜索数值范围(包括本身)之间的数据. 在使用它时,一些情况还需要注意的.如果时间的数据. 搜索时间数 ...
- httpModules与Http模块
httpModules是往当前应用程序添加HttpModule(http模块)的标签.配置节如下 <httpModules> <add name="ModuleName&q ...
- 让服务器iis支持.apk文件下载的设置方法
随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...
- 除去String字符串里面指定的字符串
主要用到String的两个方法,分别是subString(int len)或subString(int start,int end)和str.indexOf(String str1) 思路:先判断指定 ...
- android px,dp,sp大小转换工具
package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> ...
- svg.js教程及使用手册详解(二)
上篇简要介绍了svg.js的基本信息和基本用法,这篇开始详细讲解svg.js的用法. SVG元素 SVG元素主要包括各种形状.线条.文本.路径. 矩形——Rect Rects有两个参数,即矩形的宽度和 ...
- [Infopath]使用jquery给infopath表单的的field赋值。 how to set value to Infopath field by Jquery
客户有个需求,需要在infopath表单中嵌入一段我们自己的东西,计算后要更新infopath某一个field. 1. 怎么去获取到那个field 由于infopath生产的html非常的复杂,嵌套太 ...
- HashMap和SparseArray的性能比较。
HashMap和SparseArray可以实现相似的功能. 但SparseArray是Android定义的,在键是整数时,他比HashMap的性能更高,因为HashMap使用的是Integer对象, ...
- javascript 常见方法记录
1,trim():去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写. <script langu ...
- VS单元测试
弄了好久才明白 ,但是收获确实挺大的,话不多说,直接上图. 1 打开VS建立项目 2 建立一个类 3 点击创建单元测试 4 在运行模块里重新输入代码 5 在空白处 点击鼠标右键 选择运行测试 6 测试 ...