XAML是eXtensible Application Markup Language的英文縮寫(xiě),相應的中文名稱(chēng)為可擴展應用程序
標記語(yǔ)言,它是
微軟公司為構建應用程序用戶(hù)界面而創(chuàng )建的一種新的描述性語(yǔ)言。XAML提供了一種便于擴展和定位的語(yǔ)法來(lái)定義和程序邏輯分離的用戶(hù)界面,而這種實(shí)現方式和ASP.NET中的"代碼后置"模型非常類(lèi)似。XAML是一種解析性的語(yǔ)言,盡管它也可以被編譯。它的優(yōu)點(diǎn)是簡(jiǎn)化編程式上的用戶(hù)創(chuàng )建過(guò)程,應用時(shí)要添加代碼等。
簡(jiǎn)介
也就是說(shuō)在開(kāi)發(fā)一個(gè)應用程序時(shí),我們可以將開(kāi)發(fā)工作分成開(kāi)發(fā)人員和設計人員兩個(gè)團體分別進(jìn)行,各自負責后臺程序代碼邏輯和前臺程序界面的設計,這樣就使得開(kāi)發(fā)人員和設計人員之間的協(xié)作更通暢,也極大地發(fā)揮了他們的專(zhuān)長(cháng)。
XAML的發(fā)音為"Zamel"。雖然XAML包含了許多新規則、元素和語(yǔ)法,但是我并不認為學(xué)習它是一個(gè)折磨人的過(guò)程。只要讀者稍微具備一些HTML基礎知識,就可以快速地掌握XAML中的大部分內容。
優(yōu)點(diǎn)
XAML簡(jiǎn)化了.Net Framework 3.0編程模式上的用戶(hù)界面創(chuàng )建過(guò)程,使用XAML開(kāi)發(fā)人員可以對WPF程序的所有用戶(hù)界面元素(例如文本、按鈕、圖像和列表框等)進(jìn)行詳細的定置,同時(shí)還可以對整個(gè)界面進(jìn)行合理化的布局,這與使用HTML非常相似。但是由于XAML是基于XML的,所以它本身就是一個(gè)組織良好的XML文檔,而且相對于HTML,它的語(yǔ)法更嚴謹、更明確。預計以后大部分的XAML都可由相應的軟件自動(dòng)生成,就如同我們現在制作一個(gè)靜態(tài)頁(yè)面時(shí),幾乎不用編寫(xiě)任何HTML代碼就可以直接通過(guò)Dreamweaver軟件生成一個(gè)美觀(guān)的頁(yè)面。但是最初通過(guò)手動(dòng)編寫(xiě)XAML代碼將是一次絕佳的學(xué)習體驗,雖然實(shí)現的過(guò)程繁雜了些,但是將加深您對XAML語(yǔ)法和各個(gè)元素的理解。
大多數的WPF程序可能同時(shí)包含程序代碼和 XAML。我們可以使用XAML定義應用程序的初始界面,而后才編寫(xiě)相應的功能實(shí)現代碼。我們可以將邏輯代碼直接嵌入到一個(gè)XAML文件中,也可以將它保留在一個(gè)單獨的文件中。實(shí)際上,能夠用XAML實(shí)現的所有功能我們都可以使用程序代碼來(lái)完成。因此,我們根本無(wú)需使用任何的XAML就可以創(chuàng )建一個(gè)完好的WPF程序。一般來(lái)說(shuō),程序代碼的優(yōu)勢在于流程處理和邏輯判斷,而不是界面的構建上。而XAML則是集中關(guān)注于界面的編程,我們可以將它和其它的.NET語(yǔ)言配合使用,從而構建出一個(gè)功能完善、界面美觀(guān)的WPF程序。XAML是一種純正的、用來(lái)描述用戶(hù)界面構成元件和編排方式的
標記語(yǔ)言。盡管有部分的XAML語(yǔ)法具備
程序設計語(yǔ)言的特性(例如XAML中的Trigger和TRansform),但是XAML并不是一種用于程序設計的語(yǔ)言,它的功能也不是為了執行應用程序邏輯。
微軟推薦XAML被編譯成BAML(Binary Application Markup Language-二進(jìn)制語(yǔ)言程序標記語(yǔ)言)。XAML和BAML都可以被WPF解析,并且將以一種和HTML相似的方式進(jìn)行界面的呈現。但是和HTML不同的是,XAML是強類(lèi)型化的。也就是說(shuō),HTML會(huì )忽略那些它不能識別的元素和屬性,而XAML必須在識別所有的元素和屬性的情況下,才對頁(yè)面進(jìn)行呈現。盡管在XAML中各個(gè)屬性都是以一個(gè)個(gè)的字符串(例如Background)表示的,但是這些字符串實(shí)際上代表的是WPF中的對象,只有被WPF識別的對象才可以作為元素的屬性,所以我們說(shuō)XAML是強類(lèi)型化的。
新功能
微軟Build 2013發(fā)布了一些已經(jīng)被添加到Windows 8.1中的XAML新功能。[1]
Hub控件
命令欄
彈出(Flyout)控件
日期/時(shí)間選擇控件
取消StandardStyles.xaml
不是HTML
還有一點(diǎn)是我們反復強調的,XAML并不是HTML。盡管XAML在元素的聲明、程序樣式的設置和指定事件處理程序上都和HTML非常類(lèi)似,但是XAML是基于XML的,它是WPF的外在表現形式。而HTML只是一種
標記語(yǔ)言,僅僅是用來(lái)為瀏覽器呈現頁(yè)面內容。XAML除了用來(lái)呈現信息和請求用戶(hù)輸入等基本的功能外,它還包含了一些高級的特性,例如它提供了對動(dòng)畫(huà)和3D眾多方面的支持。
XAML是可擴展的,正如它的名字指明的那樣。開(kāi)發(fā)人員可以創(chuàng )建自定義的控件、元素和函數來(lái)擴展XAML。而且由于XAML各元素在本質(zhì)上就是WPF類(lèi)的映射,所以開(kāi)發(fā)人員可以很輕松地使用
面向對象的技術(shù)對XAML元素進(jìn)行擴展。也就是說(shuō)我們可以開(kāi)發(fā)一些
自定義控件和組合元素,并將它公開(kāi)給
用戶(hù)界面設計人員和其它的開(kāi)發(fā)人員使用。
XAML、Windows Presentation Foundation 和
Microsoft .NET Framework3.0 XAML 是 Microsoft® Windows Presentation Foundation (WPF) 的一部分。WPF 是 Microsoft? .NET Framework 3.0 中處理基于 Windows 的應用程序或基于 Web瀏覽器的客戶(hù)端應用程序的可視外觀(guān)的一類(lèi)功能?;?WPF 的應用程序可以在 Windows Vista上運行,也可以在安裝了 Microsoft .NET Framework 3.0(如果是基于 Web 瀏覽器的客戶(hù)端應用程序,還需要安裝
Internet Explorer 7.0)的早期版本的 Windows 上運行。
應用
WPF 借助 XAML 來(lái)利用標記而不是編程語(yǔ)言(如 C#)來(lái)構造精美逼真的用戶(hù)界面 (UI)。您可以通過(guò)定義控件、文本、圖像、形狀、動(dòng)畫(huà)等各種元素,完全采用 XAML 來(lái)制作詳盡的 UI 文檔。由于 XAML 是聲明性語(yǔ)言(類(lèi)似于 HTML),因此如果需要向應用程序中添加運行時(shí)邏輯,則需要添加代碼。例如,如果應用程序僅使用 XAML,您不僅可以創(chuàng )建并動(dòng)態(tài)顯示 UI 元素,還可以對這些元素加以配置令其以受限方式響應用戶(hù)輸入(通過(guò)使用事件觸發(fā)器)。但是,在不添加代碼的情況下,該應用程序將不能執行和響應計算,也不能自行創(chuàng )建新的 UI 元素。XAML應用程序的代碼存儲在不同于 XAML 文檔的單獨文件中。這種將 UI 設計與基礎代碼相脫離的方式,使得開(kāi)發(fā)人員和設計人員能夠更加密切地合作完成同一個(gè)項目,而不會(huì )延誤各自的進(jìn)度。
作用
在
Silverlight體系結構和 Silverlight 應用程序開(kāi)發(fā)過(guò)程中,XAML 發(fā)揮著(zhù)多種重要作用:
1、XAML 是用于聲明 Silverlight UI 及該 UI 中元素的主要格式。通常,項目中至少有一個(gè) XAML 文件表示應用程序中用于最初顯示的 UI 的"頁(yè)面"比喻。其他 XAML 文件可能聲明其他用于導航 UI 或模式替換 UI 的頁(yè)。另外一些 XAML 文件可以聲明資源,如模板或其他可以重用或替換的應用程序元素。
2、XAML 是用于聲明樣式和模板的格式,這些樣式和模板應用于 Silverlight 控件和 UI 的邏輯基礎。您可以執行此操作來(lái)模板化現有控件,或作為為控件提供默認模板的控件作者來(lái)執行此操作。
3、XAML 是用于為創(chuàng )建 Silverlight UI 和在不同設計器應用程序之間交換 UI 設計提供設計器支持的常見(jiàn)格式。最值得注意的是,Silverlight 應用程序的 XAML 可在 Expression Blend 產(chǎn)品與
Visual Studio之間互換。
4、WPF 還在 XAML 中定義其 UI。就與 WPF XAML 的關(guān)系而言,Silverlight XAML 使用共享的默認 XAML 命名空間,且對于其 XAML 詞匯具有近似的
WPF子集關(guān)系。因此,XAML 為 UI 在 Silverlight 與 WPF 之間遷移提供了一種有效途徑,這樣,您就可以針對 Silverlight 執行 UI 設計,然后幾乎無(wú)需重新設計 UI 圖面即可將此相同設計遷移到 WPF。
5、Silverlight XAML 定義 UI 的可視外觀(guān),而關(guān)聯(lián)的代碼隱藏文件定義邏輯??梢詫?UI 設計進(jìn)行調整,而不必更改代碼隱藏中的邏輯。就此作用而言,XAML 簡(jiǎn)化了負責主要可視化設計的人員與負責應用程序邏輯和信息設計的人員之間的工作流。
6、由于支持可視化設計器和設計圖面,因此,XAML 支持在早期開(kāi)發(fā)階段快速構造 UI 原型,并在整個(gè)開(kāi)發(fā)過(guò)程中使設計的組成元素更可能保留為代碼訪(fǎng)問(wèn)點(diǎn),即使可視化設計發(fā)生了巨大變化也不例外。
根據您自己在開(kāi)發(fā)過(guò)程中所扮演的角色,您可能無(wú)法廣泛地與 XAML 語(yǔ)言或 XAML 語(yǔ)法交互。您與 Silverlight XAML 交互的程度還取決于您所使用的開(kāi)發(fā)環(huán)境、是否使用交互式設計環(huán)境功能(如工具箱和屬性編輯器)以及 Silverlight 應用程序的范圍和目的。盡管如此,在開(kāi)發(fā) Silverlight 應用程序的過(guò)程中,您還是可能能夠使用基于文本的編輯器在元素級編輯 Silverlight XAML 文件。本主題旨在使您了解 XAML 語(yǔ)言和 XAML 語(yǔ)法的具體信息。此外,本主題還著(zhù)重介紹 XAML 可能特定于 Silverlight 的用法和行為的某些方面(與其他利用 XAML 的框架(如 WPF 或 WCF)相對照)。使用此信息,您應能夠放心地以文本表示形式編輯用于 Silverlight 的 XAML,當此 XAML 文件由工具、標記編譯操作或 Silverlight 運行時(shí)加載應用程序使用時(shí),保持其聲明和目的的有效性。
代碼
在 Expression Blend 中,任何給定文檔的 XAML 均存儲在 .xaml 文件中。如果 XAML 文檔有相應的基礎代碼,該代碼將存儲在文件名相同但另行添加 .cs 或 .vb 擴展名的文件中。例如,如果 XAML 文檔名為“Window1.xaml”,則當代碼的編程語(yǔ)言為 C# 時(shí),代碼隱藏文件名為“Window1.xaml.cs”。
在生成項目時(shí),WPF
分析程序將讀取該項目的 .xaml 文件,并報告所產(chǎn)生的任何錯誤。同樣地,在 Expression Blend 中打開(kāi)現有項目時(shí),分析程序將讀取項目文件夾中包含的 .xaml 文件,嘗試分析元素并在“設計”視圖中的美工板上顯示文檔。在這兩種情況下,如果分析程序遇到錯誤,將禁用美工板,并且 Expression Blend 將顯示一則錯誤消息,其中包含用于打開(kāi)“XAML”視圖的鏈接,以便您糾正該錯誤。分析錯誤也會(huì )報告在“結果”面板中的“錯誤”選項卡上。
均衡作用
您可以從 Microsoft® Expression® Design 中將美術(shù)資源導出為 XAML,然后將該 XAML 作為資源導入到 Expression Blend 中,以便在 Expression Blend 項目中利用這些資源。其他一些設計應用程序也提供了各種將美術(shù)資源轉換為 XAML 的工具。您可以在 Internet 上搜索受信任的站點(diǎn)所發(fā)布的轉換工具。