本篇从如下两个方面学习WPF XAML:
1、基本概念
2、基本语法
一、基本概念
1、XAML是派生自XML的可扩展应用程序标记语言(Extensible Application Markup Language)。微软创造。应用在WPF,WF,Silverlight,Metro App等开发技术中。
2、在WPF中,XAML用来开发用户界面。继承了XML的Tag,Attribute等语法。另有一些语法上的创新。
3、在WPF中,XAML运行在CLR之上,但它不编译为IL,而是编译为BAML代码,在运行时会被解析成CLR类型(Types)。
4、WPF中XAML是大小写敏感的。
二、基本语法
1、Tag语法=对象元素(Object Elements)
每个标签即是一个对象元素,将被解析为一个WPF Framework(主要来自PresentationFramework.dll)中的类的实例。下面的代码就是一个对象元素,运行时会被解析为一个Button对象实例。
<Button></Button>
或写成
<Button />
2、Attribute赋值语法
2.1 普通字符串赋值。下面代码给Button的Property和Event赋值。字符串将被通过包装好的TypeConverter来转换成对象。TypeConverter使用C#的Attribute技术来实现的。
<Button Content="aaa" Click="Button_Click" />
2.2 标记扩展赋值。用花括号这种方式赋值就叫标记扩展赋值。常用的地方是在用到绑定和资源的时候。
<Button Command="{Binding Copy}" />
2.3 属性元素赋值。有的时候简单字符串赋值不了的,就用属性元素赋值。
<Button> <Button.Content>aaa</Button.Content> </Button>
2.4 内容赋值。控件要有Content这个属性,也就是要继承自ContentControl这个类,才能这么赋值。夹在标签中间。
<Button>aaa</Button>
2.5 集合赋值。下面例子是给StackPanel.Children这个属性赋值一个集合,被省略了。这个属性的类型是UIElementCollection。在这个例子,我们也看到WPF支持一些省略的写法,在实际开发中运用,可以使XAML代码更简洁。
<StackPanel> <Button>a</Button> <Button>b</Button> </StackPanel>
3、命名空间。
一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下例子,xmlns为引入命名空间的attribute。第一行xmlns是没有指定别名的,是默认命名空间,它指定的命名空间包含了微软提供所有的XAML控件的程序集。第二行xmlns别名是x,也是微软提供的命名空间,这里面主要包含了一些关于解析Xaml语言的程序集。第三行xmlns是自己引入的,开发人员自己写的控件等,可以通过命名空间这种方式引用到XAML文档来使用。
<Window x:Class="WpfFirst.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:System;assembly=System" Title="MainWindow" Height="350" Width="525"> </Window>
4、附加属性,附加事件。
下面例子,Panel.ZIndex就是附加属性,而附加事件是界面上用不了的。具体在写属性和事件时候讨论。
<StackPanel> <Button Panel.ZIndex="1">a</Button> <Button Panel.ZIndex="2">b</Button> </StackPanel>
5、树。
XAML文档是树状结构的。在WPF中,有逻辑树(Logical Tree)和可视树(Visual Tree)的概念,在运行时会维护这两棵树。逻辑树是以我们看到的控件为节点的,这些控件一般继承与FrameworkElement or FrameworkContentElement,而可视树能看到控件内部的元素,这些元素一般继承自Visual类。WPF提供了两个辅助类(LogicalTreeHelper and VisualTreeHelper)来操作这两棵树。