轉(zhuǎn)帖|其它|編輯:郝浩|2011-07-08 17:45:03.000|閱讀 1137 次
概述:老實說,我第一次接觸XAML的時候,我還以為是XML呢,再后來仔細一看發(fā)現(xiàn)中間多了個A,不過當(dāng)時我還是覺得這應(yīng)該是基于XML的一種標記語言,否則也不至于起這么接近的名字吧,后來發(fā)現(xiàn),我算是"小神通"了一把,XAML的確是一種基于XML的界面描述語言。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
老實說,我第一次接觸XAML的時候,我還以為是XML呢,再后來仔細一看發(fā)現(xiàn)中間多了個A,不過當(dāng)時我還是覺得這應(yīng)該是基于XML的一種標記語言,否則也不至于起這么接近的名字吧,后來發(fā)現(xiàn),我算是"小神通"了一把,XAML的確是一種基于XML的界面描述語言。
眾所周知,WPF的設(shè)計目標就是統(tǒng)一桌面應(yīng)用程序和互聯(lián)網(wǎng)應(yīng)用程序的編程,實際上這也是整個.Net平臺的設(shè)計目標,而WPF算是一個非常好的嘗試。實現(xiàn)統(tǒng)一桌面和互聯(lián)網(wǎng)界面編程,可以極大的縮短開發(fā)應(yīng)用程序的開發(fā)周期,從而減少成本。
廢話不多說,這節(jié)簡單的接觸XAML,來看看這到底是神馬玩意。
通俗的講,XAML就是設(shè)計人員用來設(shè)計界面(桌面應(yīng)用程序和互聯(lián)網(wǎng)應(yīng)用程序)的一種描述語言。這樣整個應(yīng)用程序被分成兩大塊:界面設(shè)計人員用XAML設(shè)計界面,程序開發(fā)人云用C#、VB.Net等語言來寫相關(guān)的邏輯,開發(fā)相應(yīng)的功能。
俗話說,工欲善其事,必先利其器。先來看看使用XAML或基于XAML的工具:
1.XMALPad
這是一款非常簡易的XAML工具。
這款軟件上手基本沒有難處,最大的缺點就是沒有即時提示消息,完全類似于在記事本中寫HTML代碼,需要灰常大的記憶量,優(yōu)點是簡單、輕便,可以作為Demo演示的小工具。
2.Kaxaml
這是一款非常適合設(shè)計人員的工具。
顯而易見,不僅添加了許多的功能,而且畫面看起來也比較精美,更重要的是無與倫比的即時提示窗口,這可以避免我們記憶大量的屬性。
附下載地址://kaxaml.com/
3.Visual Studio 2008/2010
我們強大的Visual Studio怎么能缺席這場盛宴呢,而對于我們這些開發(fā)人員來說,顯然最適宜的還是VS。
VS2010與這布局基本類似,就不上圖了。總之,以我個人而言,我還是推薦在VS中編寫所有代碼(對于我們這些開發(fā)人員而言,如果是專業(yè)的界面設(shè)計人員,當(dāng)然沒必要在這個龐然大物里面寫代碼)。
4.Expression Blend
這是微軟專門推出的一款針對設(shè)計人員的開發(fā)工具,如果企業(yè)級的開發(fā),用這款軟件無疑是最好的選擇,但是最大的缺點是這軟件不便宜啊(汗一個),由于我的電腦里沒有裝這款軟件,所以直接上網(wǎng)上的截圖。
好了,工具已經(jīng)備齊,下面就來見識一下XAML的語法。
根據(jù)張晗雨先生總結(jié)的XAML使用規(guī)則:
(1).每一個XAML文檔中聲明的元素都應(yīng)該與一個CLR類匹配,其中該類的名稱由該元素的名稱標示。
如上面經(jīng)常作為示例的<Button Width="100" Height="100">Hello XAML</Button>,這里面的Button是CLR中的一個Button類,有點Winform基礎(chǔ)的都知道這個類,而在WPF中也是如此,當(dāng)然WPF中的類與Winform中的類不在同一個命名空間內(nèi),這以后再說。
(2).在XAML中,用戶可以對元素進行嵌套定義。在其他元素中定義XAML元素通常是對其父元素中的一個屬性進行賦值的過程。
如<StackPanel>
<Button Width="100" Height="100">Hello XAML</Button>
</StackPanel>
這里的StackPanel也是一個控件,這在后面的控件章節(jié)會提到。控件里面可以包含控件,但是還是需要注意一些的,比如說父控件的結(jié)束標志的位置等等,這些在學(xué)習(xí)的過程中自然會體會到,多說無益。
(3).在XAML中,對元素屬性的賦值實際上就是對該元素所對應(yīng)的類實例的屬性進行賦值,或者是對該類中定義的事件添加響應(yīng)函數(shù)。
先來看XAML代碼:
<Button Width="100" Height="100">Hello XAML</Button>
對應(yīng)的等價C#代碼則為:
Button btn=new Button();
btn.Width=100;
btn.Height=100;
btn.Content="Hello XAML";
從上面的示例也可以看出XAML一行代碼的效果,C#需要多行才能實現(xiàn),所以XAML在界面描述上是遠甚于C#的。
下面,來深入的了解完整的XAML代碼的組成:
1.根元素:
XAML中的根元素有四個:Window,Page,Application,ResourceDictionary。
很顯然,Window是對應(yīng)與桌面應(yīng)用程序的,page是對應(yīng)于互聯(lián)網(wǎng)應(yīng)用程序的,當(dāng)然這只是普遍情況,有時候桌面應(yīng)用程序也用Page。
后面兩個分別表示一個應(yīng)用程序和一個邏輯資源的集合。
2.命名空間
XAML的命名空間用xmlns來表示,一般來說下面兩個命名空間就包括了WPF中所有的命名空間:
//schemas.micosoft,com/winfx/2006/xaml/presentation;
//schemas.microsoft.com/winfx/2006/xaml
需要注意的是,這兩個命名空間跟網(wǎng)址沒有關(guān)系,在瀏覽器里輸入這兩個地址是找不到這個站點的。
如果要使用非WPF命名空間中的類,那么就需要在XAML中引入相應(yīng)的命名空間。
為XAML添加一個CLR名字空間引用的語法如下所示:
xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"
xmlns是"XML Namespace"的縮寫。
prefix是XAML名字空間的前綴,通過它可以訪問到相應(yīng)的CLR名字空間中定義的類。
除了//schemas.micosoft,com/winfx/2006/xaml/presentation這個命名空間是xmlns="//schemas.micosoft,com/winfx/2006/xaml/presentation"的方式引用外(因為它是WPF在XAML中默認命名空間),其他的所有命名空間均需要以xmlns:Prefix...的形式引用。
Namespace,即Prefix所對應(yīng)的CLR名字空間的名稱。
AssemblyName,即Namespace所指向的CLR名字空間定義所在的二進制文件位置。注意:不需要添加該二進制文件的擴展名。
在實際應(yīng)用中,我們會看到很多以x:...開頭的關(guān)鍵字,以"x:"為前綴的屬性均是定義在XAML名字空間"//schemas.microsoft.com/winfx/2006/xaml"中的特征屬性
關(guān) 鍵 字 |
何處有效 |
含義/描述 |
x:Class |
根元素的特性 |
為根元素定義一個派生自元素類型的類,可以在前面加上.NET命名空間作為前綴(可選) |
x:ClassModifier |
根元素的特性,必須與x:Class一起使用 |
定義由x:Class指定的類的可見性(該類默認是可見的)。該特性值必須根據(jù)使用的過程語言指定(如,C#中的public或internal) |
x:Code |
XAML中任何位置的元素,但是必須與x:Class一起使用 |
嵌入過程式代碼,會被插入由x:Class指定的類中 |
x:FieldModifier |
非根元素上的特性,但必須與x:Name(或者等效關(guān)鍵字)一起使用 |
定義生成的元素(默認是內(nèi)部元素)字段的可見性,與x:ClassModifier一樣,該值必須根據(jù)過程語言來指定。(如C#中的public、private等) |
x:Key |
父元素實現(xiàn)了IDictionary的元素的特性 |
當(dāng)被添加到父元素的字典里時,請為該項指定鍵名 |
x:Name |
非根元素上的特性,但必須與x:Class一起使用 |
為給元素生成的字段選擇一個名稱,這樣它就可以在過程式代碼中被引用 |
x:Shared |
Resource-Dictionary對象中的元素特性,但只有在XAML編譯后才可使用 |
可以被設(shè)置為false來避免在多個地方共享同資源實例,在第8章中有所講解 |
x:Subclass |
根元素的特性,必須與x:Class一起使用 |
為保存XAML內(nèi)容的x:Class類指定一個子類,可以用.NET命名空間作為可選前綴(用于那些沒有提供部分類支持的語言) |
x:TypeArguments |
根元素的特性,必須與x:Class一起使用 |
使根類成為泛型(如List<T>)且?guī)е付ǖ姆缎蛥?shù)實例(如List<Int32>或List<String>),可以設(shè)置一個用逗號分割的泛型參數(shù)代碼清單,如果某類型不在默認的命名空間里,需要加上XML命名空間前綴 |
x:Uid |
元素的特性 |
為元素添加一個本地化ID,詳見第8章 |
x:XData |
用于某個IXmlSerializable類型屬性的值的元素 |
對XAML解析器透明的任一個XML數(shù)據(jù)島,詳見第9章 |
還有一些常用的字符序列:
擴 展 |
含 義 |
x:Array |
代表一個.NET數(shù)組。x:Array元素的子元素都是數(shù)組元素。它必須與x:Type一起使用,用于定義數(shù)組類型 |
x:Null |
表示一個空引用 |
x:Static |
引用在過程式代碼中定義的任何一個靜態(tài)的屬性、常量或枚舉值。在XAML編譯后,這也可以是同一個程序集中的一個非公共成員。如果在默認的命名空間中沒有該類型,Member字符串必須有XML命名空間前綴 |
x:Type |
表示System.Type的一個實例,就像C#中的typeof操作符。如果在默認的命名空間中沒有該類型,TypeName字符串必須有XML命名空間前綴 |
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園