XAML(Extensible Application Markup Language的简写,发音为“zammel”)是用于实例化.NET对象的标记语言。尽管XAML是一种应用于诸多不同问题领域的技术,但其主要作用是构造WPF用户界面。换言之,XAML文档定义了在WPF应用程序中组成窗口的面板、按钮以及各种空间的布局。

一、XAML变体

  实际上术语“XAML”有多种含义。到目前为止,我们使用XAML标识整个XAML语言,它是一种基于通用XML语法、专门用于表示一颗.NET对象树的语言(这些对象可以是窗口中的按钮、文本框,或是已经定义好的自定义类。)

  XAML还包含如下几种:

  • WPF XAML包含描述WPF内容的元素,如矢量图形、控件以及文档。目前,它是最重要的XAML应用。
  • XPS XAML是WPFXAML的一部分。它为格式化的电子文档定义了一种XML标识方式。XPS XAML已作为单独的XML页面规范(XML Paper Specification ,XPS)标准发布。
  • Silverlight XAML是一个用于Microsoft Silverlight应用程序的WPF XAML子集。Silverlight是一个跨平台的浏览器插件,通过它可创建具有二维图形、动画、音频和视频的富Web内容。
  • WF XAML包含描述WF(work Flow,工作流)内容的元素。

二、XAML基础

  一旦理解了一些基础规则,XAML标准是非常简单的:

  • XAML 文档中的每个元素都映射为.NET类的一个实例。元素的名称也完全对应于类名。例如,元素<Button>指示WPF创建的Button对象。
  • 与所有XML文档一样,可以在一个元素中嵌套另一个元素。但嵌套通常是一种表示“包含”的方法——换句话说,如果在一个Grid元素中发现一个Button元素,那么用户界面可能包括一个在其内部包含的一个Button元素的Grid元素。
  • 可通过特性(attribute)设置每个类的属性(property)。但在某些情况下,特性不足以完成这项工作。对于此类情况,需要通过特殊的语法使用嵌套的标签(tag)。

  使用VS2012创建一个WPF项目。默认生成主窗体的XAML代码如下所示:

 <Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid> </Grid>
</Window>

  该文档仅包含两个元素——顶级的Window元素以及一个Grid元素,Window元素代表整个窗口,在Grid元素中可以放置所有控件。尽管可以使用任何顶级元素,但是WPF应用程序只使用以下几个元素作为顶级元素:

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

  与在所有XML文档中一样,在XAML文档中只能有一个顶级元素。在上例中,意味使用</Window>标签关闭了Window元素,文档就结束了。

2.1、XAML名称空间

  XAML解析器需要知道类位于哪个.NET名称空间。例如,在许多名称空间中可能都有Window类——Windowm类可能是指System.Windows.Window类,也可能是指位于第三方组件中的Window类。为了弄清实际上希望使用哪个类,XAML解析器会检查应用于元素的XML名称空间。

  上面显示的示例文档定义了两个名称空间:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  xmlns特性是XML中的一个特殊特性,它专门用来声明名称空间,这段标记声明了两个名称空间,在创建的所有WPF XAML文档中都会使用这两个名称空间:

  • http://schemas.microsoft.com/winfx/2006/xaml/presentation是WPF核心名称空间。它包含了所有WPF类,包括用来构建用户界面的控件。在该例中,该名称空间的声明没有使用名称空间前缀,所以它成为整个文档的默认名称空间。换句话说,除非另外指明,每个元素自动位于这个名称空间。
  • http://schemas.microsoft.com/winfx/2006/xaml 是XAML名称空间。它包含各种XAML使用特性,这些特性可影响文档的解释方式。该名称空间被映射为前缀x。这意味着可通过在元素名称之前放置名称空间前缀x来使用该名称空间(例如<x:ElementName>)。

2.2 代码隐藏类

  可通过XAML构造用户界面,但为了使应用程序具有一定的功能,就需要用于连接包含应用程序代码的事件处理程序的方法。XAML通过使用如下所示的Class特性简化了这个问题:

<Window x:Class="WpfApplication1.MainWindow">

  在XAML名称空间的Class特性之前放置了名称空间前缀x,意味着这是XAML语言中更通用的部分。实际上,Class特性告诉XAML解析器用指定的名称生成一个新类。该类继承自由XML元素命名的类。换句话说,该实例创建了一个名为MainWindow的新类,该类继承自Window基类。

  

【WPF学习】第一章 XAML介绍的更多相关文章

  1. web学习第一章

    web学习第一章   我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...

  2. 《Getting Started with WebRTC》第一章 WebRTC介绍

    <Getting Started with WebRTC>第一章 WebRTC介绍 ​ 本章是对WebRTC做概念性的介绍. 阅读完本章后.你将对下面方面有一个清晰的理解:   .  什么 ...

  3. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  4. Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  5. wpf(第一章 基础知识)

    wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案 ...

  6. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  7. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  8. Asp.Net MVC4 + Oracle + EasyUI 学习 第一章

    Asp.Net MVC4 + Oracle + EasyUI  第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...

  9. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

随机推荐

  1. golang学习笔记(一):包,变量,函数

    欢迎访问我的博客和github! go 语言学习笔记第一弹,来自 gotour ,以后要常写笔记,把自己学习笔记记录下来,就算只是笔记也要多写. 好记性不如烂笔头,也要多锻炼自己的写作能力. 说实话, ...

  2. C# 多态和接口

    1多态可以有属性,接口只有方法 2关键字不同,多态有静态多态(abstract)和动态多态(virtual),静态多态不能new()出自己,动态多态可以;多态中可以有自己的方法可设置不需要子类重写,接 ...

  3. 《N诺机试指南》(五)进制转化

    进制转化类题目类型: 代码详解及注释解答:  //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...

  4. java 利用POI 读取Execel数据的真实行数

    java 利用poi 读execel文件的操作,读取总的数据行数一般是通过调用 sheet.getLastRowNum() ;可是这样有时候会出现一些问题,例如,当其中一行的数据的确都为空,可是其原本 ...

  5. 11g与12c启动,关闭RAC

    oracle11g 关闭,启动顺序 1.关闭数据库(oracle)srvctl stop database -d rac 2.关闭集群(root)crsctl stop cluster -all 3. ...

  6. 2.5D(伪3D)站点可视化第一弹

    楔子 最近要做一个基站站点的可视化呈现项目. 我们首先尝试的是三维的可视化技术来程序,但是客户反馈的情况是他们的客户端电脑比较差,性能效率都会不好,甚至有的还是云主机. 因此我们先做了一个性能比较极致 ...

  7. C和C++中字符串与数的转换

    以下内容来自<C/C++程序设计实用案例教程> 1.在C语言中的转换方式 1.1数字转换为字符串 在C语言中,sprintf函数可以将任何多个数字格式化为指定格式的字符串,sprintf函 ...

  8. 【转】Android WiFi 经常掉线出现的几个原因分析!

    原因1.从Log分析来看,这个是由于Dhcp request fail 导致最终disconnect . Log 分析如下: 16:53:31.659 958 6525 D NetUtils: dhc ...

  9. Shiro -- (四) 数据库支持

    主要就是JdbcRealm这个类 先看一下部分源码: 先建表:users(用户名 / 密码).user_roles(用户 / 角色).roles_permissions(角色 / 权限),并且往use ...

  10. Mysql数据库操作(命令行)

    1 环境 树莓派: mysql: 2  指令 以下是从命令行中连接mysql服务器的简单实例: [root@host]# mysql -u root -p Enter password:****** ...