未来的GDI:WPF技术纵览
XAML标记语言
笔者非常赞同Charles Petzold先生的一个观点:WPF提供了两套编程API。一套用于普通的编码访问(比如C#、VB.NET等其他支持的.NET的语言;而另一套就是基于XML的,称为XAML(Extensible Application Markup Language)。
XAML可以帮助我们很好地实现用户界面代码和应用程序逻辑代码的分离。在.NET Framework 3.0和Windows Vista中,XAML与WPF一起构建所有的UI。由于XAML是基于XML的,所以每个XAML代码都肯定是一个完整的XML文件。XAML继承了XML所有的定义和规则。XAML与其他XML扩展不同之处就是他所表示的意义。每个XAML元素是一个.NET CLR类。基于XML的声明式编程语言使得我们非常容易扩展和操作XAML。利用XAML与WPF的这种关系,界面设计人员可以单独的设计绚丽的用户界面。我们可以把程序逻辑写在单独的文件,编译后,两者可以完美地结合实现应用程序的功能。下面是一个非常简单的XAML示例:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FirstXAML" Height="200" Width="300" >
<Canvas>
<Button Background="Blue"/>
</Canvas>
</Page>
从这个例子中,我们可以很容易发现三项XML提供的功能:名称空间、属性和子元素。代码中首先
映射了WPF的默认名称空间。在Canvas元素之中我们定义了一个Button元素,并将其背景色设置为蓝色(Blue)。事实上,利用子元素特性,我们还可以这样设置Button的背景色:
<Button>
<Button.Background>Blue</Button.Background>
</Button>
XAML文件最后编译为BAML(Binary Application Markup Language)文件。通常,BAML文件比XAML更小,编译后的BAML加载速度更快。这些BAML文件被以资源的形式嵌入到程序集(Assembly)当中。同时生成相应的代码(文件名称是FileName.g.cs或者FileName.g.vb),这些代码根据XAML元素分别生成命名的 Attribute字段。以及调用BAML的构造函数。