XAML

XAML

XAML是eXtensible Application Markup Language的英文縮寫,相應的中文名稱為可擴展應用程序標記語言,它是微軟公司為構建應用程序用戶界面而創建的一種新的描述性語言。XAML提供了一種便於擴展和定位的語法來定義和程序邏輯分離的用戶界面,而這種實現方式和ASP.NET中的"代碼後置"模型非常類似。XAML是一種解析性的語言,儘管它也可以被編譯。它的優點是簡化編程式上的用戶創建過程,應用時要添加代碼和配置等。

簡介


也就是說在開發一個應用程序時,我們可以將開發工作分成開發人員和設計人員兩個團體分別進行,各自負責後台程序代碼邏輯和前台程序界面的設計,這樣就使得開發人員和設計人員之間的協作更通暢,也極大地發揮了他們的專長。
XAML的發音為"Zamel"。雖然XAML包含了許多新規則、元素和語法,但是我並不認為學習它是一個折磨人的過程。只要讀者稍微具備一些HTML基礎知識,就可以快速地掌握XAML中的大部分內容。

優點


XAML簡化了.Net Framework 3.0編程模式上的用戶界面創建過程,使用XAML開發人員可以對WPF程序的所有用戶界面元素(例如文本、按鈕、圖像和列表框等)進行詳細的定置,同時還可以對整個界面進行合理化的布局,這與使用HTML非常相似。但是由於XAML是基於XML的,所以它本身就是一個組織良好的XML文檔,而且相對於HTML,它的語法更嚴謹、更明確。預計以後大部分的XAML都可由相應的軟體自動生成,就如同我們現在製作一個靜態頁面時,幾乎不用編寫任何HTML代碼就可以直接通過Dreamweaver軟體生成一個美觀的頁面。但是最初通過手動編寫XAML代碼將是一次絕佳的學習體驗,雖然實現的過程繁雜了些,但是將加深您對XAML語法和各個元素的理解。
大多數的WPF程序可能同時包含程序代碼和 XAML。我們可以使用XAML定義應用程序的初始界面,而後才編寫相應的功能實現代碼。我們可以將邏輯代碼直接嵌入到一個XAML文件中,也可以將它保留在一個單獨的文件中。實際上,能夠用XAML實現的所有功能我們都可以使用程序代碼來完成。因此,我們根本無需使用任何的XAML就可以創建一個完好的WPF程序。一般來說,程序代碼的優勢在於流程處理和邏輯判斷,而不是界面的構建上。而XAML則是集中關注於界面的編程,我們可以將它和其它的.NET語言配合使用,從而構建出一個功能完善、界面美觀的WPF程序。XAML是一種純正的、用來描述用戶界面構成元件和編排方式的標記語言。儘管有部分的XAML語法具備程序設計語言的特性(例如XAML中的Trigger和TRansform),但是XAML並不是一種用於程序設計的語言,它的功能也不是為了執行應用程序邏輯。
微軟推薦XAML被編譯成BAML(Binary Application Markup Language-二進位語言程序標記語言)。XAML和BAML都可以被WPF解析,並且將以一種和HTML相似的方式進行界面的呈現。但是和HTML不同的是,XAML是強類型化的。也就是說,HTML會忽略那些它不能識別的元素和屬性,而XAML必須在識別所有的元素和屬性的情況下,才對頁面進行呈現。儘管在XAML中各個屬性都是以一個個的字元串(例如Background)表示的,但是這些字元串實際上代表的是WPF中的對象,只有被WPF識別的對象才可以作為元素的屬性,所以我們說XAML是強類型化的。

新功能


微軟Build 2013發布了一些已經被添加到Windows 8.1中的XAML新功能。
• Hub控制項
• 命令欄
• 彈出(Flyout)控制項
• 日期/時間選擇控制項
• 取消StandardStyles.xaml

不是HTML


還有一點是我們反覆強調的,XAML並不是HTML。儘管XAML在元素的聲明、程序樣式的設置和指定事件處理程序上都和HTML非常類似,但是XAML是基於XML的,它是WPF的外在表現形式。而HTML只是一種標記語言,僅僅是用來為瀏覽器呈現頁面內容。XAML除了用來呈現信息和請求用戶輸入等基本的功能外,它還包含了一些高級的特性,例如它提供了對動畫和3D眾多方面的支持。
XAML是可擴展的,正如它的名字指明的那樣。開發人員可以創建自定義的控制項、元素和函數來擴展XAML。而且由於XAML各元素在本質上就是WPF類的映射,所以開發人員可以很輕鬆地使用面向對象的技術對XAML元素進行擴展。也就是說我們可以開發一些自定義控制項和組合元素,並將它公開給用戶界面設計人員和其它的開發人員使用。
XAML、Windows Presentation Foundation 和Microsoft .NET Framework3.0 XAML 是 Microsoft® Windows Presentation Foundation (WPF) 的一部分。WPF 是 Microsoft® .NET Framework 3.0 中處理基於 Windows 的應用程序或基於 Web瀏覽器的客戶端應用程序的可視外觀的一類功能。基於 WPF 的應用程序可以在 Windows Vista上運行,也可以在安裝了 Microsoft .NET Framework 3.0(如果是基於 Web 瀏覽器的客戶端應用程序,還需要安裝Internet Explorer 7.0)的早期版本的 Windows 上運行。

應用


WPF 藉助 XAML 來利用標記而不是編程語言(如 C#)來構造精美逼真的用戶界面 (UI)。您可以通過定義控制項、文本、圖像、形狀、動畫等各種元素,完全採用 XAML 來製作詳盡的 UI 文檔。由於 XAML 是聲明性語言(類似於 HTML),因此如果需要嚮應用程序中添加運行時邏輯,則需要添加代碼。例如,如果應用程序僅使用 XAML,您不僅可以創建並動態顯示 UI 元素,還可以對這些元素加以配置令其以受限方式響應用戶輸入(通過使用事件觸發器)。但是,在不添加代碼的情況下,該應用程序將不能執行和響應計算,也不能自行創建新的 UI 元素。XAML應用程序的代碼存儲在不同於 XAML 文檔的單獨文件中。這種將 UI 設計與基礎代碼相脫離的方式,使得開發人員和設計人員能夠更加密切地合作完成同一個項目,而不會延誤各自的進度。

作用


在Silverlight體系結構和 Silverlight 應用程序開發過程中,XAML 發揮著多種重要作用:
1、XAML 是用於聲明 Silverlight UI 及該 UI 中元素的主要格式。通常,項目中至少有一個 XAML 文件表示應用程序中用於最初顯示的 UI 的"頁面"比喻。其他 XAML 文件可能聲明其他用於導航 UI 或模式替換 UI 的頁。另外一些 XAML 文件可以聲明資源,如模板或其他可以重用或替換的應用程序元素。
2、XAML 是用於聲明樣式和模板的格式,這些樣式和模板應用於 Silverlight 控制項和 UI 的邏輯基礎。您可以執行此操作來模板化現有控制項,或作為為控制項提供默認模板的控制項作者來執行此操作。
3、XAML 是用於為創建 Silverlight UI 和在不同設計器應用程序之間交換 UI 設計提供設計器支持的常見格式。最值得注意的是,Silverlight 應用程序的 XAML 可在 Expression Blend 產品與Visual Studio之間互換。
4、WPF 還在 XAML 中定義其 UI。就與 WPF XAML 的關係而言,Silverlight XAML 使用共享的默認 XAML 命名空間,且對於其 XAML 辭彙具有近似的WPF子集關係。因此,XAML 為 UI 在 Silverlight 與 WPF 之間遷移提供了一種有效途徑,這樣,您就可以針對 Silverlight 執行 UI 設計,然後幾乎無需重新設計 UI 圖面即可將此相同設計遷移到 WPF。
5、Silverlight XAML 定義 UI 的可視外觀,而關聯的代碼隱藏文件定義邏輯。可以對 UI 設計進行調整,而不必更改代碼隱藏中的邏輯。就此作用而言,XAML 簡化了負責主要可視化設計的人員與負責應用程序邏輯和信息設計的人員之間的工作流。
6、由於支持可視化設計器和設計圖面,因此,XAML 支持在早期開發階段快速構造 UI 原型,並在整個開發過程中使設計的組成元素更可能保留為代碼訪問點,即使可視化設計發生了巨大變化也不例外。
根據您自己在開發過程中所扮演的角色,您可能無法廣泛地與 XAML 語言或 XAML 語法交互。您與 Silverlight XAML 交互的程度還取決於您所使用的開發環境、是否使用互動式設計環境功能(如工具箱和屬性編輯器)以及 Silverlight 應用程序的範圍和目的。儘管如此,在開發 Silverlight 應用程序的過程中,您還是可能能夠使用基於文本的編輯器在元素級編輯 Silverlight XAML 文件。本主題旨在使您了解 XAML 語言和 XAML 語法的具體信息。此外,本主題還著重介紹 XAML 可能特定於 Silverlight 的用法和行為的某些方面(與其他利用 XAML 的框架(如 WPF 或 WCF)相對照)。使用此信息,您應能夠放心地以文本表示形式編輯用於 Silverlight 的 XAML,當此 XAML 文件由工具、標記編譯操作或 Silverlight 運行時載入應用程序使用時,保持其聲明和目的的有效性。

代碼


在 Expression Blend 中,任何給定文檔的 XAML 均存儲在 .xaml 文件中。如果 XAML 文檔有相應的基礎代碼,該代碼將存儲在文件名相同但另行添加 .cs 或 .vb 擴展名的文件中。例如,如果 XAML 文檔名為“Window1.xaml”,則當代碼的編程語言為 C# 時,代碼隱藏文件名為“Window1.xaml.cs”。
在生成項目時,WPF分析程序將讀取該項目的 .xaml 文件,並報告所產生的任何錯誤。同樣地,在 Expression Blend 中打開現有項目時,分析程序將讀取項目文件夾中包含的 .xaml 文件,嘗試分析元素並在“設計”視圖中的美工板上顯示文檔。在這兩種情況下,如果分析程序遇到錯誤,將禁用美工板,並且 Expression Blend 將顯示一則錯誤消息,其中包含用於打開“XAML”視圖的鏈接,以便您糾正該錯誤。分析錯誤也會報告在“結果”面板中的“錯誤”選項卡上。

均衡作用


您可以從 Microsoft® Expression® Design 中將美術資源導出為 XAML,然後將該 XAML 作為資源導入到 Expression Blend 中,以便在 Expression Blend 項目中利用這些資源。其他一些設計應用程序也提供了各種將美術資源轉換為 XAML 的工具。您可以在 Internet 上搜索受信任的站點所發布的轉換工具。