WPF常見布局面板用法及介紹
常見的幾個布局面板

1.StackPanel面板
StackPanel面板能夠簡單根據(jù)單行或者單列進行元素排列, StackPanel 默認的布局方向為垂直方向(Vertical), 由Orientation屬性控制。
Orientation屬性:
用戶控制布局方向是垂直還是橫向排列。分別有兩個值可選:Vertical、Horizontal
示例代碼:
<StackPanel Orientation="Vertical">
<Button>button1</Button>
<Button>button2</Button>
<Button>button3</Button>
</StackPanel>效果圖(如上面所述 StackPanel面板Orientation屬性默認為Vertical):

設(shè)置 Orientation="Horizontal" 時, 控件布局方向則為橫向, 效果圖。

默認情況下, StackPanel面板中的元素都會根據(jù)StackPanel的大小而改變, StackPanel面板指定了Width和Height值。
布局屬性:
| VerticalAlignment | 當垂直方向有額外的空間, 可以選擇Top、Center、Bottom、Stretch進行設(shè)置布局 |
| HorizontalAlignment | 當水平方向有額外的空間, 可以選擇Center、Left、Right、Stretcj進行設(shè)置布局 |
| Margin | 相對控件的4個邊、設(shè)置邊距,可以單獨設(shè)置各個邊距,也可以統(tǒng)一設(shè)置一個邊距 類似:Margin="1 2 3 4" 或 Margin="1" |
【VerticalAlignment/HorizontalAlignment】屬性:
為了能夠看到效果, 通常預(yù)留控件額外的空間, 示例, 默認的StackPanel面板中添加幾組按鈕, 剩下的白色區(qū)域為額外的空間。

這個時候, 針對StackPanel面板設(shè)置VerticalAlignment屬性為Center, 此時所有的子元素被居中顯示,額外的空間被均分。
注:而Bottom、Top、Stretch 則分別表示整體元素居下,居上、整體伸展。
默認情況下, StackPanel面板的VerticalAlignment、HorizontalAlignment 默認屬性均為 Stretch
<!-- StackPanel -->
<StackPanel VerticalAlignment="Center">
<Button>button1</Button>
<Button>button2</Button>
<Button>button3</Button>
</StackPanel>效果圖:

Margin(邊距)屬性:
正如前人書中所說, 一個設(shè)計良好窗口不止是包含元素、還應(yīng)當在元素之間包含一定的額外空間。所以這個時候Margin屬性派上用場。
以上的示例圖中, 均沒有設(shè)置Margin屬性, 所以會看到的是, 每個元素之間都緊貼。
當設(shè)置邊距時, 可以統(tǒng)一設(shè)置元素所有邊的距離, 如下所示:
<!-- StackPanel -->
<StackPanel>
<Button Margin="3">button1</Button>
<Button Margin="3">button2</Button>
<Button Margin="3">button3</Button>
</StackPanel>另外一種,則是分別對元素的邊: 左、上、右、下的順序設(shè)置邊距, 如下所示:
<!-- StackPanel -->
<StackPanel>
<Button Margin="3 6 3 3">button1</Button>
<Button Margin="3">button2</Button>
<Button Margin="3">button3</Button>
</StackPanel>2.WarpPanel面板
與StackPanel面板類型, WarpPanel面板也是以行或列的形式進行元素排列, 默認情況下, WarpPanel面板的Orientation屬性則為Horizontal,元素以橫向進行排列。
注意:與StackPanel面板不同的是, WarpPanel默認情況下, 所有元素均不會被拉伸。這里要強調(diào)的一點: StackPanel中, 元素會根據(jù)Orientation屬性進行拉伸,
1.當Orientation="Horizontal"時, 元素被垂直拉伸
2.當Orientation="Vertical"時, 元素被水平拉伸
示例圖:


同樣的, WarpPanel面板具備StackPanel的屬性。區(qū)別則在于上面的不同。
3.DockPanel面板
用過winform的小伙伴應(yīng)該都知道, 在winform中, 幾乎所有的空間都具備Dock??繉傩? 可以針對元素進行單獨設(shè)置Dock定位。然而在WPF中, 這點顯然是不具備的。
所以對于靈活的WPF來說, DockPanel面板具備了這個能力。凡是包含在DockPanel面板中的子元素, 都會具備Dock附加屬性。
下圖所示, 對DockPanel進行簡單的添加元素設(shè)置Dock屬性:

示例代碼:
<DockPanel>
<Button DockPanel.Dock="Top">button1</Button>
<Button DockPanel.Dock="Right" >button2</Button>
<Button DockPanel.Dock="Left">button3</Button>
</DockPanel>注意:DockPanel的LastChildFill屬性, 主要用于設(shè)置DockPanel中最后一個元素的會具備填充效果。如上圖的button3元素
LastChildFill 字面意思則可以理解, 最后一個元素是否填充。通過設(shè)置true/false,
效果圖(LastChildFill="false") :

<DockPanel <strong>LastChildFill="False"</strong>>
<Button DockPanel.Dock="Top">button1</Button>
<Button DockPanel.Dock="Right" >button2</Button>
<Button DockPanel.Dock="Left">button3</Button>
</DockPanel>4.Grid面板
Grid面板類型HTML中的table表格, 為了能夠讓元素或內(nèi)容按照規(guī)定的位置排列, 首先得定義足夠得行和列。
注意: Grid中定義得Row與Column屬性默認在元素中都是從0開始索引, 在下面示例中,為了演示都進行了添加(如果在程序中,位置已經(jīng)確定, 可以默認不加)。
定義行與列( RowDefinitions/ColumnDefinitions)
<Grid>
<strong> <!-- 下面分別定義了2行 2列 --></strong>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>添加元素:
下面為Grid定義得2行2列基礎(chǔ)上添加4個按鈕, 下圖所示:

代碼所示:
<Grid>
<!-- 下面分別定義了2行 2列 -->
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0">左上</Button>
<Button Grid.Column="1" Grid.Row="0">右上</Button>
<Button Grid.Column="0" Grid.Row="1">左下</Button>
<Button Grid.Column="1" Grid.Row="1">右下</Button>
</Grid>注意:盡管一個單元格中, 允許放置多個元素, 通常來說這沒有什么意義。如上所示, 每個元素都明確了對應(yīng)單元格中。
Grid與WarpPanel和StackPanel面板等容器不同得區(qū)別在于, Grid需要顯式定義行與列來放置元素。而相對于其他容器,則會隱式創(chuàng)建行與列。
調(diào)整行和列:
Grid面板支持3種設(shè)置尺寸的方式:
| 硬編碼尺寸 | width="xxx" / height="xxx" |
| 自動設(shè)置尺寸 | width="auto" / height="auto" |
| 按比例設(shè)置尺寸 | width="*" / height="2*" |
例如, 下面的代碼演示了三種設(shè)置尺寸的方式:
<Grid>
<!-- 下面分別定義了2行 2列 -->
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0">左上</Button>
<Button Grid.Column="1" Grid.Row="0">右上</Button>
<Button Grid.Column="0" Grid.Row="1">左下</Button>
<Button Grid.Column="1" Grid.Row="1">右下</Button>
</Grid>實際的顯示效果可以看到, 第一列width="*" 為第二列的1/2, 第一行設(shè)置的自適應(yīng)高度, 而第二行則是硬編碼的高度 100

注意: 當使用Grid進行按比例設(shè)置列或者行時, 如果Grid寬度為奇數(shù)像素, 那么被分割的行列像素帶小數(shù), 當改列包含形狀元素、邊框、圖像, 那么顯示內(nèi)容可能是模糊的,
如果這個問題影響布局, 則只需要將Grid的UseLayoutRounding屬性設(shè)置為True即可。
跨行與跨列:
處于Grid中的任意元素, 都具有兩個附加屬性, 分別為 RowSpan與 ColumnSpan。像這種跨行跨列在web應(yīng)用中十分常見。
下面的示例中演示了如何針對元素進行跨列顯示:

5.UniformGrid面板
與Grid相反, UniformGrid并不遵循Grid的眾多原則, 無論是顯式聲明行和列, 還有其附加屬性。反而, 通過簡單的設(shè)置
Rows和Columns屬性來設(shè)定其尺寸。每個單元格都被均勻分配, 關(guān)鍵一點, 所有元素最后都根據(jù)其定義的先后順序放置在
單元格中。

示例代碼如下:
<UniformGrid Rows="2" Columns="2">
<Button>button1</Button>
<Button>button2</Button>
<Button>button3</Button>
<Button>button4</Button>
</UniformGrid>6.Canvas面板
Canvas面板允許使用精準的坐標放置元素, 為了在Canvas面板中定位一個元素, 需要設(shè)置Canvas.Left 和 Canvas.Top屬性。

Code:通過設(shè)置元素的附加屬性 Canvas.Left 、Top、Right、Bottom 等進行元素定位
<Canvas>
<Button Canvas.Left="100" Canvas.Top="50">button1</Button>
<Button Canvas.Left="100" Canvas.Top="80">button2</Button>
</Canvas>
到此這篇關(guān)于WPF常見布局面板用法及介紹的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET下使用WScript.Shell執(zhí)行命令
ASP.NET下有自己的執(zhí)行CMD命令的方式,這里用WScript.Shell似有畫蛇添足之嫌,但是我們也不能排除真的有機器禁用了.NET的相關(guān)類,未雨綢繆嘛。當然也不僅僅局限于WScript.Shell,只要是ASP中能用的組件,統(tǒng)統(tǒng)都可以用于ASP.NET中,而且還更方便!2008-05-05
ASP.NET MVC異步獲取和刷新ExtJS6 TreeStore
這篇文章主要為大家詳細介紹了ASP.NET MVC異步獲取和刷新ExtJS6 TreeStore的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
使用asp.net的pageDataSource中時索引問題解決方法
當前頁面在數(shù)據(jù)的除第一頁的任何一個頁面時,重新條件查詢并且是新條件的總頁數(shù)小于剛才查詢得到的頁碼時,就會出現(xiàn)“索引 20 不是為負數(shù),就是大于行數(shù)”的類似的錯誤2013-04-04
asp.net Repeater分頁實例(PageDataSource的使用)
Asp.net提供了三個功能強大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分頁功能。相對DataGrid,DataList和Repeater控件具有更高的樣式自定義性,所以很多時候我們喜歡使用DataList或Repeater控件來顯示數(shù)據(jù)2013-04-04
基于asp.net下使用jquery實現(xiàn)ajax的解決方法
本文以最簡單的方法為新手示范如何使用jquery實現(xiàn)ajax技術(shù)(所以本文是專為新手所寫,老鳥勿噴,大神此處省略一萬字)。至于什么是jquery什么是ajax,自己谷歌去2013-05-05
.Net連接Oracle數(shù)據(jù)庫的實現(xiàn)代碼
本文使用System.Data.OracleClient方式,這是MS提供的以ADO.NET方式訪問Oracel的驅(qū)動;Oracle也有個Oracle Data Provider for .NET(ODP.NET)下篇再討論。2009-02-02
IIS Express 取代 ASP.NET Development
這篇文章主要介紹了IIS Express 取代 ASP.NET Development Server的配置方法,需要的朋友可以參考下2023-06-06
.NET 白名單文件通過反序列化執(zhí)行系統(tǒng)命令的方法
本文介紹了如何利用微軟簽名的白名單文件VisualUiaVerifyNative.exe繞過安全防護,詳細解析了其依賴庫、反序列化漏洞利用過程,并演示了實際操作步驟,感興趣的朋友一起看看吧2024-11-11
通過HttpClient 調(diào)用ASP.NET Web API示例
本篇文章主要介紹了通過HttpClient 調(diào)用ASP.NET Web API示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

