【WPF學習】第五章 理解WPF的佈局

  在Windows開發人員設計用戶界面的方式上,WPF佈局模型是一個重大改進。在WPF問世以前,Windows開發人員使用刻板的基於座標的佈局將控件放到正確位置。在WPF中,這種方式雖然可行,但已經極少使用。大多數應用程序將使用相似Web的流(flow)佈局;在使用流佈局模型時,控件能夠擴大,並將其餘控件擠到其餘位置。開發人員能建立與現實分辨率和窗口大小無關的、在不一樣的顯示器上正確縮放的用戶界面;當窗口內容發生變化時,界面可調整自身,而且能夠自如地處理語言的切換。要利用該系統的優點,首先須要進一步理解WPF佈局模型的基本概念和假設。工具

1、 WPF佈局原則佈局

  WPF窗口只能包含單個元素。爲在WPF窗口中放置多個元素並建立更貼近實用的用戶界面,須要在窗口上放置一個容器,而後再這個容器中添加其餘元素。設計

  在WPF中,佈局由您實用的容器來肯定。儘管有多個容器可供選擇,但「理想的」WPF窗口須要遵循如下幾條重要原則:blog

  • 不該顯示設定元素(如控件)的尺寸。元素應當能夠改變尺寸以適合它們的內容。例如,當添加更多的文本時按鈕應當可以擴展。可經過設置最大和最小尺寸來限制能夠接受的控件尺寸範圍。
  • 不該使用屏幕座標指定元素的位置。元素應當由它們的容器根據它們的尺寸、順序以及(可選的)其餘特定與具體佈局容器的信息進行排列。若是須要在元素之間添加空白空間,可以使用Margin屬性。
  • 佈局容器的子元素「共享」可用的空間。若是空間容許,佈局容器會根據每一個元素的內容儘量爲元素設置更合理得尺寸。它們還會向一個或多個子元素分配多餘的空間。
  • 可嵌套的佈局容器。典型的用戶界面使用Grid面板做爲開始,Grid面板是WPF中功能最強大的容器,Grid面板可包含其餘佈局容器,包含的這些容器以最小的分組排列元素,好比帶有標題的文本框、列表框中的項、工具欄上的圖標以及一列按鈕等。

  儘管對於這幾條原則而言也有一些例外,但它們反映了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控件,儘管這有點違反直覺)。接下來文章會分別介紹核心容器信息。

相關文章
相關標籤/搜索