参考文献:

http://msdn.microsoft.com/zh-cn/library/ms752059(v=vs.110).aspx

《Pro WPF 4.5 in C# 》

一、XAML概况

1.XAML是什么

XAML (Extensible Application Markup Language ,读作zammel) 是用于实例化.Net的一种声明性标记语言。

2.XAML有什么用

当使用Visual Studio编写WPF程序时,你设计的Window不是转化成代码,而是转换成一系列XAML标签。当你运行这个WPF程序时,这些标签代码会生成用户界面的对象。

3.为什么要学习XAML

虽然可以用Visual Studio 设计Window,但是学习XAML,可以帮助你更好地学习WPF的概念。更重要的是,要更好地完成许多WPF程序,需要我们手写XAML文件。有的开发者喜欢通过Visual Studio设计UI,再通过编辑XAML文件来调整细节。但是在某些情况下,完全手写XAML文件,可能是更好的选择。

二、XAML基础

1.基本特征

i.对象元素(element)

对象元素语法始终以左尖括号 (<) 开头。要完成对象元素标记,以右尖括号 (>) 结尾,或者用一个正斜杠后接一个右尖括号 (/>) 来完成标记。

每个XAML对象元素都与.NET的类名匹配。如:


<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

例子当中,StackPanel和Button是两个对象元素。

ii.对象特性(attribute)

可在对象元素标签内,用赋值运算符 (=)设置特性。特性的值始终以包含在引号中的字符串的形式进行指定。

iii.对于对象元素的某些属性,特性语法是不可能实现的,因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性(property)元素语法<类型名称.属性名称>。通常,该标记的内容是类型的一个对象元素,属性会将该元素作为其值。 指定内容之后,必须用一个结束标记结束属性元素。 结束标记的语法为 </类型名称.属性名称>。如:

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

例子当中,为Button对象元素设置了Background、Foreground、Content三个属性。

2.根元素,xmlns,xmlns:x

一个简单的XAML文件:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="112,79,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

    </Grid>
</Window>

i.一个XAML文件只能有一个根元素:Window,Page,Application等等。为页使用Window或Page,为外部字典使用ResourceDictionary,或为应用程序定义使用 Application。比如,当一个Window标签结束,该XAML就结束了。

ii.根元素还包含特性xmlns和xmlns:x。xmlns指明默认的XAML命名空间。对于大多数 WPF 应用程序方案,默认的 XAML 命名空间均映射到为 WPF 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation

iii.xmlns:x 特性指示另外一个 XAML 命名空间,该命名空间映射 XAML 语言命名空间 http://schemas.microsoft.com/winfx/2006/xaml。该命名空间是支持 XAML 语言构造的专用 XAML 命名空间。

有关x:前缀编程构造,参阅:《XAML 命名空间 (x:) 语言功能》(http://msdn.microsoft.com/zh-cn/library/ms753327(v=vs.110).aspx)