天天看點

學習WPF——了解WPF中的XAML

XAML的簡單說明

XAML是用于執行個體化.NET對象的标記語言,主要用于建構WPF的使用者界面 XAML中的每一個元素都映射為.NET類的一個執行個體,例如<Button>映射為WPF的Button對象 XAML可以在一個元素中嵌套另一個元素,例如Grid元素可以嵌套Button元素

了解XAML

VisualStudio建立一個視窗,預設情況下産生的代碼如下: 這段代碼中包含兩個标記元素,一個是Window,一個是Grid Window是WPF頂級元素的一種,還有另外兩種頂級元素Page和Application Window 用于描述一個視窗 Page 和Window類似,但它用于可導航的應用程式 Application 用于定義應用程式資源和啟動設定 任何一個XAML文檔隻能擁有一個頂級元素

屬性

視窗标簽中Title、Height、Width都是視窗的屬性 在XAML檔案中屬性的值的類型總是字元串, 但XAML的解析器可以把這些字元串轉換成.NET的任意類型

名稱空間

在上面代碼中,用xmlns屬性來标記此文檔從屬于哪個名稱空間 為什麼需要名稱空間呢? 如果我們在第三方元件中定義了Window類,如果沒有一個名稱空間做限定的話, 編譯器不知道我們将使用哪個Window類型來渲染視窗 我們在上面的代碼中,看到了兩個名稱空間,一個是WPF核心名稱空間、一個是XAML名稱空間 WPF核心名稱空間 <a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation</a> 包含所有WPF類,包含用來建構使用者界面的控件,是文檔的預設名稱空間 XAML名稱空間 <a href="http://schemas.microsoft.com/winfx/2006/xaml">http://schemas.microsoft.com/winfx/2006/xaml</a> 包含各種XAML實用特性,這些特性可以影響文檔的解釋方式,該名稱空間被映射為字首x,使用前需要标注字首x,比如:&lt;x:ElementName&gt; 有了名稱空間的限定,我們直接書寫的&lt;Grid&gt;标簽,才可以映射到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》 <a href="http://msdn.microsoft.com/zh-cn/library/system.windows.media.lineargradientbrush(v=vs.110).aspx">MSDN</a>

備注

本篇隻簡單介紹了XAML的常見知識,還有一些不常見的知識、進階主題暫時沒有涉及

繼續閱讀