XAML的簡單說明
XAML是用於實例化.NET對象的標記語言,主要用於構建WPF的用戶界面XAML中的每一個元素都映射為.NET類的一個實例,例如<Button>映射為WPF的Button對象XAML可以在一個元素中嵌套另一個元素,例如Grid元素可以嵌套Button元素
了解XAML
VisualStudio創建一個窗口,默認情況下產生的代碼如下:
這段代碼中包含兩個標記元素,一個是Window,一個是GridWindow是WPF頂級元素的一種,還有另外兩種頂級元素Page和Application
Window用於描述一個窗口 Page 和Window類似,但它用於可導航的應用程序 Application用於定義應用程序資源和啟動設置 任何一個XAML文檔只能擁有一個頂級元素
屬性
窗口標簽中Title、Height、Width都是窗口的屬性在XAML文件中屬性的值的類型總是字符串,但XAML的解析器可以把這些字符串轉換成.NET的任意類型
名稱空間
在上面代碼中,用xmlns屬性來標記此文檔從屬於哪個名稱空間為什么需要名稱空間呢?如果我們在第三方組件中定義了Window類,如果沒有一個名稱空間做限定的話,編譯器不知道我們將使用哪個Window類型來渲染窗口我們在上面的代碼中,看到了兩個名稱空間,一個是WPF核心名稱空間、一個是XAML名稱空間
WPF核心名稱空間 包含所有WPF類,包含用來構建用戶界面的控件,是文檔的默認名稱空間 XAML名稱空間 包含各種XAML實用特性,這些特性可以影響文檔的解釋方式,該名稱空間被映射為前綴x,使用前需要標注前綴x,比如:<x:ElementName>有了名稱空間的限定,我們直接書寫的<Grid>標簽,才可以映射到System.Windows.Controls.Grid類上
代碼隱藏類
XAML創建用戶界面,但交互規則還是需要.NET語言編寫x:Class屬性標記着與該XAML文件相配合的.NET類
注意這個類是一個“部分類”這個部分類的構造函數中調用了InitializeComponent方法,這個方法負責創建控件對象、設置屬性、綁定事件、構造用戶界面等工作
復雜屬性
有些屬性的值不是一個簡單類型,而是一個對象,不如下面這個Grid的背景顏色
![]()
我們現在只要知道XAML解析器也能創建出復雜屬性對應的值即可
標記擴展
如果我們希望把屬性值綁定為一個已經存在的對象,那么我們可以使用靜態標記擴展
標記擴展還有很多其他的用法,我們以后再聊這里也涉及到了屬性綁定,我們以后再聊
附加屬性
對於嵌套的元素,子元素可以使用父元素定義的一些屬性,這類屬性就是附加屬性在WPF中附加屬性多用於布局
修改記錄
2015-1-5:完成全部內容
參考資料
《Pro WPF 4.5 in C# 4th Edition》
備注
本篇只簡單介紹了XAML的常見知識,還有一些不常見的知識、高級主題暫時沒有涉及