關於WPF(三)布局

2021-10-10 19:59:53 字數 1273 閱讀 5606

wpf用不同的容器(container)安排布局。每個容器有各自的布局邏輯——有些容器以堆疊方式布置元素,另一些容器在網格中不可見的單元格中排列元素,等等。

1.1.wpf布局原則

wpf視窗只能包含單個元素。為在wpf視窗中放置多個元素並建立更貼近實用的使用者介面,需要在視窗上放置乙個容器,然後在這個容器中新增其他元素。

在wpf中,布局由您使用的容器來確定。儘管有多個容器可供選擇,但「理想的」wpf視窗需要遵循以下幾條重要原則:

1.不應顯式設定元素(如控制項)的尺寸。元素應當可以改變尺寸以適合它們的內容。

2.不應使用螢幕座標指定元素的位置。元素應當由它們的容器根據它們的尺寸、順序以及(可選的)其他特定於具體布局容器的資訊進行排列。如果需要在元素之間新增空白空間,可使用margin屬性。。

3.布局容器的子元素「共享」可用的空間。如果空間允許,布局容器會根據每個元素的內容盡可能為元素設定更合理的尺寸。它們還會向乙個或多個子元素分配多餘的空間。

4.可巢狀的布局容器。典型的使用者介面可使用grid面板作為開始,grid面板是wpf中功能最強大的容器,grid面板可包含其他布局容器,包含的這些容器以更小的分組排列元素,比如帶有標題的文字框、列表框中的項、工具欄上的圖示以及一系列按鈕等。

1.2.布局過程

wpf布局包括兩個階段:測量(measure)階段和排列(arrange)階段。在測量階段,容器遍歷所有子元素,並詢問子元素它們所期望的尺寸。在排列階段,容器在合適的位置放置子元素。當然,元素未必總能得到最合適的尺寸——有時容器沒有足夠大的空間以適應所含的元素。在這種情況下,容器為了適應視覺化區域的尺寸,就必須裁剪不能滿足要求的元素。通常可通過設定最小視窗尺寸來避免這種情況。

1.3.布局容器

所有wpf布局容器都是派生自system.windows.controls.panel抽象類的面板。panel類新增了少量成員,包含三個公有屬性。

background:該屬性是用於為面板背景著色的畫刷。如果想收到滑鼠事件,就必須將該屬性設定為非空值(如果想接受滑鼠事件,又不希望顯示固定顏色的背景,那麼只需要將背景色設定為透明即可)。

children:該屬性是在面板中儲存的條目集合。這是第一級條目——換句話說,這些條目自身也可以包含更多的條目。

isitemshost:該屬性是乙個布林值,如果面板用於顯示與itemscontrol控制項關聯的項,該屬性值為true。在大多數情況下,甚至不需要知道列表控制項使用後台面板來管理它所包含的條目的布局。

WPF 之 布局(三)

六 dockpanel dockpanel定義乙個區域,在此區域中,您可以使子元素通過描點的形式排列,這些物件位於 children 屬性中。停靠面板其實就是在winform類似於dock屬性的元 素。dockpanel會對每個子元素進行排序,並停靠在面板的一側,多個停靠在同側的元素則按順序排序。如...

WPF 之 布局(三)

六 dockpanel dockpanel定義乙個區域,在此區域中,您可以使子元素通過描點的形式排列,這些物件位於 children 屬性中。停靠面板其實就是在winform類似於dock屬性的元 素。dockpanel會對每個子元素進行排序,並停靠在面板的一側,多個停靠在同側的元素則按順序排序。如...

WPF之路 WPF布局系統

0,什麼是布局 這是乙個很簡單的問題。簡單來說,就是把一些控制項有條理的擺放在介面上合適的位置,顯然擺的亂七八糟不能算布局。在wpf中,這個條理與winform中略有不同,讓我們看個很簡單的介面 這樣子的介面大家在熟悉不過了。依圖所示,wpf先用藍線 假設的線 將介面劃分為上下兩部分,然後再有紅線劃...