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. javascript 中根据sort 方法随机数组 (Math.random)

    var arr = [1,2,3,4,5,6,7,8,9,10]; function Arandom(a,b){ return (Math.random() > 0.5) ? 1 : -1;; ...

  2. WPF性能改善---之化整为零(蜂窝的衍生应用)

    在有的项目中,有这样的需求,由于显示器的显示区域是有限的,而软件却要展示一个远大于显示区域的一些元素,此时就要引入放大.缩小.拖动等UI控制技术,而在使用这些技术的同时,在后台有效的控制渲染元素的个数 ...

  3. Nexus私服使Maven更加强大

    前边简单介绍了Maven,而Maven默认提供的中央仓库是在远程网络服务Appache提供的,这对于我们开发时不合理的.如果我们没网了或者什么情况,我们怎么办?也就是说我们队中央仓库的依赖性太大.而N ...

  4. python正则表达式的学习记录

    match和findall的区别以及有括号和无括号的区别 strvar = "hello\n\nworld" find_re = re.compile("hello[.| ...

  5. [Issue]repo/repo init-解决同步源码Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle

    1. 前两天想搭建freescale L3.0.35_4.1.0_BSP包,结果LTIB环境搭建好,也编译出rootfs/uboot/kernel的Image了,但是准备移植uboot的时候发现ubo ...

  6. [系统集成] CI持续集成项目简介

    一.问题的产生 公司的多个部门围绕着产品开发.测试.发布.维护,设置有不同的岗位和系统,这些岗位和系统缺少有效的整合,没有实现自动化,效率不是很高,因此就有了CI(持续集成)的项目需求. 二.解决方案 ...

  7. BPEL_Oracle BPEL新一代工作流介绍(概念)

    2014-11-02 Created By BaoXinjian

  8. CF109 C. Lucky Tree 并查集

    Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...

  9. pandas 0.19.0 documentation

    pandas 0.19.0 documentation » http://pandas.pydata.org/pandas-docs/stable/style.html

  10. mat(Eclipse Memory Analyzer tool)之二--heap dump分析

    文章中的shallow.retained关键字的说明见:GC是如何回收时的判断依据.shallow size.retained size 在本文中,将介绍MAT(Eclipse Memory Anal ...