本文是互联力量的Silverlight系列内容之二,面向Silverlight初学者,重点描述Silverlight XAML的基本特点。如果你对Silverlight是什么还不清楚,请参考什么是Silverlight

XAML称为可扩展应用程序标记语言(Extensible Application Markup Language),读作“zammel”,它的作用通俗的说,就是表现Silverlight的界面,如同HTML用来表现网页界面。毫无疑问,你要用Silverlight,就必须了解XAML。很显然,XAML比HTML要复杂,总体上并不难以学习。XAML也是脚本类型的语言,需要专门的解析器来解释执行,每个版本都有对应的解析器,Silverlight 4的解析器并不能解析Silverlight 3,但是Microsoft为了兼容,在Silverlight 4核心库提供了Silverlight 3的XAML解析器。可以使用VS2010,Blend,XAMLPad或文本编辑器,编写XAML,它毕竟只是个“外观语言”。

VS2010每次都会自动生成一小段XAML代码,如下:

  
1
2
3
4
5
6
7
<UserControl x:Class="MySilverlight.Page"
  <Grid Background="OldLace">
 
  </Grid>
</UserControl>
 

这段文本,保存在后缀为.xaml的文件,实际是xaml的源码文件。通过VS2010或Blend可以看到界面效果,显示了背景为“OldLace”色彩的区域。其它的是什么意思呢,先看UserControl,这是.net 用户控件的基类,在Asp.net中常见。用在Silverlight中也有类似Asp.net的意思,UserControl类封装了Silverlight程序最必需的要求,包含了初始化UI的基本部分。Microsoft认为,功能应该划分为小模块,同时界面效果应该重用,封装控件是最适合的方式。这样Silverlight的每个页面,实际派生的是UserControl类。这点来看很类似MasterPage的效果。

x:Class="MySilverlight.Page"这句话是说,当前的XAML有后置代码,放在.xaml.cs文件中,里面包含的是XAML对应的类的定义。x:Class指定了当前XAML页面的类,如:


1
2
3
4
5
6
7
8
9
10
namespace MySilverlight
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
    }
}

再来看xmlns,它表示为名称空间,xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 这是XAML的命名空间,引用到Silverlight核心程序集,如System.Windows,xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 是XAML 语言元素要用到的 命名空间,通常将它映射为 x: 前缀。这里顺便说下,为什么要使用这么多名称空间,你在界面引用不同的类型,控件,标记,这些都需要有一个无二义性的唯一名称,这些元素的来源不同,所以需要用不同的方式来引用。xmlns这个关键字,是为了符合xml 1.0规范,在每个页面的根元素中使用。

思考,如果现在有个自定义的按钮,需要在XAML中使用,该如何引用呢。首先要单独引用名称空间,使用xmlns,然后声明引用的clr名称空间clr-namespace,程序集的名字是www.Foxitjob.com,完整的写法是

 

1
2
3
4
<UserControl x:Class="MySilverlight.Page"
  xmlns:h="clr-namespace:www.foxitjob.com">

 

 


引用之后,才能使用这个控件:

 
1
2
3
<Grid Background="OldLace">
   <h:HotButton Text="按钮" Click="Clicked"></h:HotButton>
</Grid>