本篇從如下兩個方面學(xué)習(xí)WPF XAML:
1、基本概念
2、基本語法
一、基本概念
1、XAML是派生自XML的可擴(kuò)展應(yīng)用程序標(biāo)記語言(Extensible Application Markup Language)。微軟創(chuàng)造。應(yīng)用在WPF,WF,Silverlight,Metro App等開發(fā)技術(shù)中。
2、在WPF中,XAML用來開發(fā)用戶界面。繼承了XML的Tag,Attribute等語法。另有一些語法上的創(chuàng)新。
3、在WPF中,XAML運(yùn)行在CLR之上,但它不編譯為IL,而是編譯為BAML代碼,在運(yùn)行時會被解析成CLR類型(Types)。
4、WPF中XAML是大小寫敏感的。
二、基本語法
1、Tag語法=對象元素(Object Elements)
每個標(biāo)簽即是一個對象元素,將被解析為一個WPF Framework(主要來自PresentationFramework.dll)中的類的實(shí)例。下面的代碼就是一個對象元素,運(yùn)行時會被解析為一個Button對象實(shí)例。
<Button></Button>
或?qū)懗?/p>
<Button />
2、Attribute賦值語法
2.1 普通字符串賦值。下面代碼給Button的Property和Event賦值。字符串將被通過包裝好的TypeConverter來轉(zhuǎn)換成對象。TypeConverter使用C#的Attribute技術(shù)來實(shí)現(xiàn)的。
<Button Content="aaa" Click="Button_Click" />
2.2 標(biāo)記擴(kuò)展賦值。用花括號這種方式賦值就叫標(biāo)記擴(kuò)展賦值。常用的地方是在用到綁定和資源的時候。
<Button Command="{Binding Copy}" />
2.3 屬性元素賦值。有的時候簡單字符串賦值不了的,就用屬性元素賦值。
<Button> <Button.Content>aaa</Button.Content> </Button>
2.4 內(nèi)容賦值?丶蠧ontent這個屬性,也就是要繼承自ContentControl這個類,才能這么賦值。夾在標(biāo)簽中間。
<Button>aaa</Button>
2.5 集合賦值。下面例子是給StackPanel.Children這個屬性賦值一個集合,被省略了。這個屬性的類型是UIElementCollection。在這個例子,我們也看到WPF支持一些省略的寫法,在實(shí)際開發(fā)中運(yùn)用,可以使XAML代碼更簡潔。
<StackPanel> <Button>a</Button> <Button>b</Button> </StackPanel>
3、命名空間。
一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下例子,xmlns為引入命名空間的attribute。第一行xmlns是沒有指定別名的,是默認(rèn)命名空間,它指定的命名空間包含了微軟提供所有的XAML控件的程序集。第二行xmlns別名是x,也是微軟提供的命名空間,這里面主要包含了一些關(guān)于解析Xaml語言的程序集。第三行xmlns是自己引入的,開發(fā)人員自己寫的控件等,可以通過命名空間這種方式引用到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文檔是樹狀結(jié)構(gòu)的。在WPF中,有邏輯樹(Logical Tree)和可視樹(Visual Tree)的概念,在運(yùn)行時會維護(hù)這兩棵樹。邏輯樹是以我們看到的控件為節(jié)點(diǎn)的,這些控件一般繼承與FrameworkElement or FrameworkContentElement,而可視樹能看到控件內(nèi)部的元素,這些元素一般繼承自Visual類。WPF提供了兩個輔助類(LogicalTreeHelper and VisualTreeHelper)來操作這兩棵樹。