在Windows開發人員設計用戶界面的方式上,WPF佈局模型是一個重大改進。在WPF問世以前,Windows開發人員使用刻板的基於座標的佈局將控件放到正確位置。在WPF中,這種方式雖然可行,但已經極少使用。大多數應用程序將使用相似Web的流(flow)佈局;在使用流佈局模型時,控件能夠擴大,並將其餘控件擠到其餘位置。開發人員能建立與現實分辨率和窗口大小無關的、在不一樣的顯示器上正確縮放的用戶界面;當窗口內容發生變化時,界面可調整自身,而且能夠自如地處理語言的切換。要利用該系統的優點,首先須要進一步理解WPF佈局模型的基本概念和假設。工具
1、 WPF佈局原則佈局
WPF窗口只能包含單個元素。爲在WPF窗口中放置多個元素並建立更貼近實用的用戶界面,須要在窗口上放置一個容器,而後再這個容器中添加其餘元素。設計
在WPF中,佈局由您實用的容器來肯定。儘管有多個容器可供選擇,但「理想的」WPF窗口須要遵循如下幾條重要原則:blog
儘管對於這幾條原則而言也有一些例外,但它們反映了WPF的整體設計目標。換句話說,若是建立WPF應用程序時,循環了這些原則,將會建立出更好的、更靈活的用戶界面。若是不遵循這些原則,最終將獲得不是很適合WPF的而且難以維護的用戶界面。 繼承
2、佈局過程開發
WPF佈局包括兩個階段:測量(measure)階段和排列(arrange)階段。在測量階段,容器遍歷全部子元素,並詢問子元素它們所指望的尺寸。在排列階段,容器在合適的位置放置子元素。容器
固然,元素未必總能等到最合適的尺寸——有事容器沒有足夠大的空間以適應所含的元素。在這種狀況下,容器爲了適應可視化區域的尺寸,就必須剪裁不能知足要求的元素。在後面能夠看到,一般可經過設置最小窗口尺寸來避免這種狀況。可視化
3、佈局容器擴展
全部WPF佈局容器都是派生自System.Windows.Controls.Panel抽象類的面板。以下圖所示:stylus
Panel類添加了少許成員,包括三個公有屬性,以下表所示:
表 Panel的公有屬性
就Panel基類自己而言沒有什麼特別的,但他是其它更多特殊類的起點。WPF提供了大量可用於安排佈局的繼承自Panel的類。下表列出了其中幾個最基本的類。與全部WPF控件和大多數可視化元素同樣,這些類位於System.Windows.Controls名稱空間裏。
表 核心佈局面板
除這些核心容器外,還有幾個更專業的面板,在各類控件中均可能遇到它們。這些容器包括專門用於包含特定控件子元素的面板——如TabPanel面板(在TabPanel面板中包含多個選項卡)、ToolbarPanel面板(工具欄中的多個按鈕)以及ToolbarOverflowPanel面板(Toolbar控件的溢出菜單中的多個命令)。還有VirtualizingStackPanel面板,數據綁定列表空間使用該面板以大幅下降開銷;還有InkCanvas控件,該控件和Canvas控件相似,但該控件支持處理平板電腦(TabletPC)上的手寫筆(stylus)輸入(例如,根據選擇的模式,InkCanvas控件,儘管這有點違反直覺)。接下來文章會分別介紹核心容器信息。