剖析XAML語言

  這節剖析一下XAML(讀作:zaml)——這一WPF中的UI設計語言。

XAML

    在wpf中,UI部分使用xaml語言來編寫,xaml語言是由xml語言派生而來的語言,所以在xaml中我們可以看到很多熟悉的特點:它也是使用標籤構建頁面,一個標籤就對應一個對象,標籤與標籤之間或為並列關係,或為包含關係。

    標籤分為非空標籤和空標籤,非空標籤是指標籤中可以包含子標籤,空標籤則不能包含任何子標籤,它們的樣子如下:

    非空標籤:<tag>[<childtag…>]</tag>

    空標籤:<tag/>

    每一個標籤都有其特性,比如我們可以為window標籤設置title,width特性,為Grid標籤設置Background特性等等,也可以為標籤事件設置事件處理器(標籤事件被觸發時要執行的方法),詳情如下圖:

    我為window標籤設置了title為「XAML語言」,及其寬高,還為其設置了Loaded事件(當window被載入的時候觸發)的事件處理器。

 

xmlns

    在C#中有命名空間的概念,我們可以使用using引入,就可以使用其中的類,在xaml中,也同樣有命名空間,在window標籤中用xmlns聲明的這幾行,這就是本頁面引入的命名空間。

    一般的情況下,我們引入命名空間,都是為了使用其中的控制項,或者使用一些類型轉換器(TypeConverter,後續章節會講)等工具類,所以為了區分我們使用的是哪個命名空間下的控制項或類,我們必須要在引入命名空間的同時,指定它在本頁面的別名,也就是xmlns冒號後的值,如上圖中的「x」,「d」,”mc”等,我們使用的時候也要在標籤前加上名字:<x:tag/>。

    另外,我們看到上圖中引入的命名空間是一個個http鏈接,但這並不是去訪問了某個地址,而是xaml中的硬編碼,當系統遇到這樣的鏈接,就會去引用一堆命名空間,用一行引用代替了多行引用。再一個,一個頁面可以有一個默認命名空間,也就是xmlns後沒有別名,當我們使用的控制項沒有標明使用哪個命名空間時,系統會自動去默認命名空間中尋找,就像window,grid這樣的控制項,是由xmlns=”//schemas.microsoft.com/winfx/2006/xaml/presentation”都在這一行引入的命名空間中。

    我們新建一個介面,命名空間默認就是以上這樣的幾行,但其實它引入了很多,單單//schemas.microsoft.com/winfx/2006/xaml/presentation這一個聲明就會引入如下一堆命名空間:

    所以我們基本上不需要考慮引入哪些基本命名空間,微軟已經幫我們做好了 。

編譯

    當我們運行時,系統會編譯xaml程式碼,會將xaml編譯為一個partial 類,類名就是window 標籤第一行用x:Class指定的名稱,也就是會跟我們的後台類合併,這一點還是跟WinForm一樣的。

    後台程式碼中的InitializeComponent()方法就是編譯xaml後的部分類給的,作用是去初始化控制項。

 

 

 

本節到此結束,我的公眾號:DotNet 致知

 

Tags: