XAML是用于实例化.NET对象的标记语言,主要用于构造WPF界面。不同于WPF之前的Windows编程技术(WinForm,MFC及win32sdk),在WPF之中界面主要是在XAML中添加界面对象所对应的标记以声明式来完成的,而且XAML充分做到了将界面与业务逻辑分开,这样界面设计人员只需实现需求所要求的界面,而开发人员利用WPF丰富的事件完成相关的业务逻辑。
     WPF的程序不能离开部分类的概念,XAML中虽然是一种XML变种形式构成的,但实际上是一个部分类,并与XAML对应的cs文件中的类构成一个完整的类。WPF程序在编译时会将XAML编译为BAML,并将编译后的BAML作为资源嵌入程序集中,当然这些都是由编译器自动完成的。
    下面简单说说XAML的语法规则:
    1) XAML文档中的每个元素对应.NET类的一个类,且元素名称与类名相同,例如:<Button>对应System.Windows.Controls.Button。而元素的属性则对应类的属性;
    2)同XML一样,在XAML中一个元素中可以嵌套另一个元素。但具体的解释方式不同,不如Button是个内容控件,嵌套在其内部的对象实际上是赋给了Button对象的Content属性;而像Grid,因为Grid是布局,所以嵌套在其内部的元素都被添加到Grid的Children集合中;
    下面以一个具体的例子来进行说明:
1  <Window x:Class="WindowsApplication1.Window1"
2    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4    Title="Window1" Height="300" Width="300">
5    <Grid Name="gridMainLayout">
6    </Grid>
7  </Window>
 
1. 最外层的元素是个顶级元素,一个XAML文档只可以有一个顶级元素,而且顶级元素必须是Window、Page或Application类或其派生类;
2. 第四行中Height="300" Width="300",表示窗口大小为300*300单位。因为WPF为了不因本地分辨率而影响显示效果,所以采用相对度量系统,基本单位为1/96英寸而不是像素;
3. 同cs中的类一样,在XAML中也要引入对应的名称空间。上面示例的第2行是WPF核心名称空间(包含所有WPF类,包括用于构建用户界面的控件),第3行是XAML名称空间(包含各种XAML实用特性);
4. 第3行的xmlns:x相当于XAML名称空间别名,后面欲使用XAML名称空间中的类时语法为x:XXX。而第2行没有后缀标志WPF核心名称空间为默认名称空间。这两个是每个XAML文件中都会有的,属于固定写法;
5. 当要在XAML中引入类外资源时要先引入名称空间,语法为:xmlns:gui="clr-namespace:Das.Main.Gui;assembly=Das.Main.Gui",clr-namespace表示要导入的名称空间为Das.Main.Gui;assembly表示要引用的程序集;
6. x:Class="WindowsApplication1.Window1"表示该XAML对应的代码隐藏类,在这个类中实现相关的业务逻辑,形式如下:
1  namespace WindowsApplication1
2  {
3    public partial class Window1 : Window
4    {
5      public Window1()
6      {
7        InitializeComponent();
8      }
9    }
10  };
7. InitializeComponent方法中调用System.Windows.Application类的LoadComponent方法从程序集中提取BAML,并使它构建用户界面,在解析BAML时创建每个控件对象并设置属性和关联所有事件处理程序;
8. 如果要在代码隐藏类中操作XAML中的控件,则使用Name属性为控件提供名称,编译BAML后Name的值会成为该控件的引用变量名
9. 形如Name="gridMainLayout"这样的为简单属性,属性的值都为字符串,在编译BAML中会调用对应的转换器,将字符串值转换为对应类型的值;
10. 形如:
  <Grid Name="gridMainLayout">
    <Grid.ColumnDefinitions>
      <ColumnDefinition/>
    </Grid.ColumnDefinitions>
  </Grid>
中的ColumnDefinitions属性这样的为复杂属性。因为这些对象的值一般为另一个对象而不是一个字符串,所以就要通过嵌套元素的方式来给复杂属性赋值。当然可以通过嵌套元素的方式为任何属性赋值;
11. 为实现非硬编码属性值或将属性值设置为其他对象,或将属性绑定到另一个控件来动态设置属性值,可采用标记扩展语法完成,例如:
<Button ... Background="{x:Static SystemColors.RedBrush}"/>。即{标记扩展类 参数};
12. 附加属性:容器中的控件会根据容器的类型而获得额外的特征,这些附加的特征即附加属性,最常见在Grid内的元素中定义该元素在Grid中的位置;
13. 属性值中难免会有<、>、&或",所以XAML提供了对应的转义字符,对应为&lt、&gt、&amp及&quot;
14 在XAML中可以给对象的事件添加处理方法,比如:
<Button ... Click="cmdAnswer_Click"/>
这样就给Button的Click事件添加了处理方法,在VS中在输入Click=后,按Tab键会根据Button的Name值自动在代码隐藏类中添加方法;
 

XAML学习笔记的更多相关文章

  1. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  2. Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

    Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...

  3. Caliburn.Micro学习笔记(二)----Actions

    Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...

  4. Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

    Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...

  5. Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

    Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...

  6. Caliburn.Micro学习笔记(五)----协同IResult

    Caliburn.Micro学习笔记目录 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execu ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  9. Windows phone 8 学习笔记(5) 图块与通知(转)

    基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...

随机推荐

  1. TextArea限制输入长度

    cs文件中添加文本框属性this.TextBox.Attributes.Add("MaxLength", "200"); $(document).ready(f ...

  2. bzoj1382: [Baltic2001]Mars Maps

    Description 给出N个矩形,N<=10000.其坐标不超过10^9.求其面积并 Input 先给出一个数字N,代表有N个矩形. 接下来N行,每行四个数,代表矩形的坐标. Output ...

  3. 三星电视删除USB播放记录

    当使用三星UA40系列电视机播放USB设备中的文件后,会将播放的历史记录存储在电视里.如果想要清除这些播放记录,需要将电视机复位,操作方法如下: 这里提醒您:复位后电视的所有设置都将恢复为出厂默认设置 ...

  4. TextBox(只允许输入字母或者数字)

    实现如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  5. c++builder6.0 mdi窗体+自定义子窗体

  6. 由csdn开源项目评选中闹出刷票问题想到投票程序的设计

    帖子<#CSDN刷票门# 有没有人在恶意刷票?CSDN请告诉我!用24小时监控数据说话!> http://www.cnblogs.com/sanshi/p/3155946.html 网站投 ...

  7. HtmlParser + HttpClient 实现爬虫

    简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地:HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向 ...

  8. cf666 C. Codeword 组合数学 离线分块思想

                      time limit per test 6 seconds memory limit per test 256 megabytes input standard i ...

  9. Oracle数据库 External component has thrown an exception

    出现这种错误一般是在SQL语句执行前就报出的错误.这样的错误一般需要仔细检查SQL语句,以及参数的数据类型. 而在cmd.ExecuteNonQuery()中出现的错误,则很可能就排除了语法类的错误. ...

  10. 四步轻松实现用Visio画UML类图

    本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对Visio画UML类图的步骤一定会有所了解. 用Visio画UML类图 对于画类图的工 ...