閑話WPF之二(XAML概述)

來源:互聯網
上載者:User

在我開始看WPF文檔開始的幾天裡,腦子裡形成了一種錯誤的想法:WPF不就是XAML碼?當時的感覺就是鬱悶啦,我學習WPF還得弄這個東西。給人的第一感覺就是WPF很複雜。雖然對WPF的熟悉和瞭解還不是特別多,但現在已經知道這確實是一種錯誤的想法。

Charles Petzold先生曾有一篇文章介紹了WPF、XAML的一些關係(The Two APIs)。文章中說明了WPF為什麼很複雜:因為WPF有兩套API,一套用於普通的編碼訪問(比如C#、VB.NET等其中.NET支援的語言。而另外一套就是基於XML的API,被稱為XAML(Extensible Application Markup Language)。

XAML實現UI代碼和應用程式邏輯代碼的分離。在.NET 3.0和Windows Vista中,XAML與WPF一起建立整個的UI。由於XAML是基於XML的,所以每個XAML代碼都肯定是一個完整的XML檔案。XAML繼承了XML所有的定義和規則。XAML與其他XML擴充不同之處就是他所表示的意義。每個XAML元素是一個.NET CLR類。基於XML使得我們非常容易擴充和操作XAML。利用XAML的WPF這種關係,開發人員可以單獨的設計漂亮的UI,也許真正的美工會更多的出現。我們可以把程式邏輯寫在單獨的檔案或者是內聯嵌入到XML檔案。

 

在XAML中使用得最多的XML功能應該有三個:命名空間、屬性和子項目。

 

先看一個簡單的XAML的例子:

<Window x:Class="FirstXAML.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="FirstXAML" Height="200" Width="300"

   >

  <Canvas>

  </Canvas>

</Window>

其中的xmlns就是XML中的名字空間,在W3C中xmlns是如下定義的:

XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with namespaces identified by URI references.

簡單地說就是xmlns提供了一種方法把URI引用的名字空間定義為當前XML檔案的元素和屬性的預設命名空間。這裡表示當前這個XML文檔,也就是我們的XAML檔案,它的預設的命名空間就是http://schemas.microsoft.com/winfx/2006/xaml/presentation。

然後是屬性和子項目,XML對屬性的表示除了可以用Property外,還可以用子項目,在XAML中也是如此,看一個簡單的例子:

<Button Width="6">

   <Button.Background>White</Button.Background>

</Button>

例子當中就使用了屬性和子項目兩種方式來指定屬性。其中的Width是直接用屬性工作表示,Background屬性是用子項目表示。在多數時候,但不是所有,你可以自由選擇這兩種表示方式之一。

XAML被編譯為BAML(Binary Application Markup Language)檔案。通常,BAML檔案比XAML更小,編譯後的BAML都是Pre-tokenized的,這樣在運行時能更快速的載入、分析XAML等等。這些BAML檔案被以資源的形式嵌入到Assembly當中。同時產生相應的代碼(檔案名稱是**.g.cs或者**.g.vb),這些代碼根據XAML元素分別產生命名的 Attribute欄位。以及載入BAML的建構函式。


 

最後,關於XAML的優點,我附上一點翻譯過來的條款,可能更直觀:

XAML除了有標記語言、XML的優點外,還有如下一些優點:

   用XAML設計UI更簡單

   XAML比其他的UI設計技術所需編碼更少。

   XAML設計的UI方便轉移、方便在其他環境提交。比如在Web或Windows Client。

   用XAML設計動態UI非常容易

   XAML給UI設計人員帶來新的革命,現在所有的設計人員不再需要.NET開發的知識同樣可以設計UI。在不遠的將來,終端使用者可以看到更漂亮的UI。

未完待續

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.