1.4 认识XAML

1.4.1 什么是XAML

在开发基于Silverlight的应用程序时,XAML语言具有举足轻重的地位,因此掌握好XAML语言,绝对是进入Silverlight世界的一条捷径。XAML是eXtensible Application Markup Language的缩写,翻译为中文是“可扩展应用程序标记语言”,它是一种声明性语言,可以使用声明性XAML标记创建可见UI元素。然后可以使用单独的代码隐藏文件响应事件和操作使用XAML声明的对象。如下面的示例代码,声明了一段最简单的XAML:

XAML

      <UserControl x:Class="Chapter01.XAMLExample.Page"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Width="400" Height="300">
          <Grid x:Name="LayoutRoot" Background="White">
          </Grid>
      </UserControl>

这段代码中最外层是以UserControl开始,然后在UserControl中声明了一个Grid元素,仅此而已,其中最重要的一点就是命名空间的声明,如下两行代码:

XAML

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

第一个声明将整个Silverlight命名空间映射为默认命名空间,第二个声明为XAML映射一个单独的XML命名空间,通常将它映射到x:前缀。这两个声明之间的关系是:XAML是一个语言定义,而Silverlight是将XAML用作语言的一个实现,特别要指出的是,Silverlight使用了XAML的一个严格子集。XAML语言指定某些语言元素,其中的每个元素都应当可以通过针对XAML命名空间执行的XAML处理器实现来进行访问。

XAML的Silverlight实现及其预期的编程模型通常对其自己的XAML词汇表使用默认的XML命名空间,而对XAML命名空间的Silverlight子集中需要的标记语法使用单独映射的前缀。按照约定,该前缀是x:,例如,若要通过分部类将全部代码隐藏加入XAML文件,必须将该类指定为相关XAML文件的根元素中的x:Class属性,如上述示例代码中x:Class="Chapter01. XAMLExample.Page"。

1.4.2 XAML基本使用

本节将介绍XAML的一些基本使用,包括在XAML中声明对象、为元素设置属性等。

在XAML中声明对象可以直接使用对象元素语法,使用开始标记和结束标记将对象声明为XML元素,如下示例代码所示,在Grid元素中声明了一个矩形元素:

XAML

      <Grid x:Name="LayoutRoot" Background="White">
          <Rectangle></Rectangle>
      </Grid>

如果元素中没有包含其他子元素,还可以简写为:

XAML

      <Grid x:Name="LayoutRoot" Background="White">
          <Rectangle/>
      </Grid>

在XAML中为元素设置属性,有多种方式可供选择:

使用XML特性语法

使用属性元素语法

使用内容元素语法

此方法列表并不表示可以使用这些方法中的任何一种来设置给定的属性,在Silverlight中某些元素的属性只支持其中一种方法,某些属性可能支持多种方式的属性设置方法。

使用XML特性语法为元素设置属性非常简单,如下面的示例代码所示:

XAML

      <Rectangle Width="200" Height="100" Fill="OrangeRed">
      </Rectangle>

Silverlight中的某些元素属性支持使用属性元素语法来设置属性,即在元素的属性中再指定另外一个子元素,如下面的示例代码所示:

XAML

      <Rectangle Width="200" Height="100">
          <Rectangle.Fill>
           <SolidColorBrush Color="OrangeRed"/>
          </Rectangle.Fill>
      </Rectangle>

某些Silverlight元素提供的属性允许使用XAML语法时忽略该属性的名称,仅通过提供所属类型的对象元素标记中的一个值来设置该属性,称之为“内容元素语法”。如TextBlock元素的Text属性,可以如下示例代码所示设置Text属性而无须指定Text属性的名称:

XAML

      <TextBlock>
          欢迎进入Silverlight世界
      </TextBlock>

当然对于该属性也可以按如下形式指定Text属性,效果是一样的:

XAML

      <TextBlock Text="欢迎进入Silverlight世界">
      </TextBlock>

1.4.3 XAML特性

除了上面介绍的XAML的基本使用之外,XAML还有如下一些重要的特性:

XAML是以XML为基础的语言扩展

XAML必须是格式良好的XML

XAML中的标记对应.NET Framework中的类型

XAML具备面向对象及继承的特性

XAML区分大小写

XAML中能实现的,通过隐藏代码同样可以实现

XAML中也会创建元素树