您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“WPF常見(jiàn)布局面板怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“WPF常見(jiàn)布局面板怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
StackPanel面板能夠簡(jiǎn)單根據(jù)單行或者單列進(jìn)行元素排列, StackPanel 默認(rèn)的布局方向?yàn)榇怪狈较?Vertical), 由Orientation屬性控制。
Orientation屬性:
用戶控制布局方向是垂直還是橫向排列。分別有兩個(gè)值可選:Vertical、Horizontal
示例代碼:
<StackPanel Orientation="Vertical"> <Button>button1</Button> <Button>button2</Button> <Button>button3</Button> </StackPanel>
效果圖(如上面所述 StackPanel面板Orientation屬性默認(rèn)為Vertical):
設(shè)置 Orientation="Horizontal" 時(shí), 控件布局方向則為橫向, 效果圖。
默認(rèn)情況下, StackPanel面板中的元素都會(huì)根據(jù)StackPanel的大小而改變, StackPanel面板指定了Width和Height值。
布局屬性:
VerticalAlignment | 當(dāng)垂直方向有額外的空間, 可以選擇Top、Center、Bottom、Stretch進(jìn)行設(shè)置布局 |
HorizontalAlignment | 當(dāng)水平方向有額外的空間, 可以選擇Center、Left、Right、Stretcj進(jìn)行設(shè)置布局 |
Margin | 相對(duì)控件的4個(gè)邊、設(shè)置邊距,可以單獨(dú)設(shè)置各個(gè)邊距,也可以統(tǒng)一設(shè)置一個(gè)邊距 類似:Margin="1 2 3 4" 或 Margin="1" |
【VerticalAlignment/HorizontalAlignment】屬性:
為了能夠看到效果, 通常預(yù)留控件額外的空間, 示例, 默認(rèn)的StackPanel面板中添加幾組按鈕, 剩下的白色區(qū)域?yàn)轭~外的空間。
這個(gè)時(shí)候, 針對(duì)StackPanel面板設(shè)置VerticalAlignment屬性為Center, 此時(shí)所有的子元素被居中顯示,額外的空間被均分。
注:而B(niǎo)ottom、Top、Stretch 則分別表示整體元素居下,居上、整體伸展。
默認(rèn)情況下, StackPanel面板的VerticalAlignment、HorizontalAlignment 默認(rèn)屬性均為 Stretch
<!-- StackPanel --> <StackPanel VerticalAlignment="Center"> <Button>button1</Button> <Button>button2</Button> <Button>button3</Button> </StackPanel>
效果圖:
Margin(邊距)屬性:
正如前人書(shū)中所說(shuō), 一個(gè)設(shè)計(jì)良好窗口不止是包含元素、還應(yīng)當(dāng)在元素之間包含一定的額外空間。所以這個(gè)時(shí)候Margin屬性派上用場(chǎng)。
以上的示例圖中, 均沒(méi)有設(shè)置Margin屬性, 所以會(huì)看到的是, 每個(gè)元素之間都緊貼。
當(dāng)設(shè)置邊距時(shí), 可以統(tǒng)一設(shè)置元素所有邊的距離, 如下所示:
<!-- StackPanel --> <StackPanel> <Button Margin="3">button1</Button> <Button Margin="3">button2</Button> <Button Margin="3">button3</Button> </StackPanel>
另外一種,則是分別對(duì)元素的邊: 左、上、右、下的順序設(shè)置邊距, 如下所示:
<!-- StackPanel --> <StackPanel> <Button Margin="3 6 3 3">button1</Button> <Button Margin="3">button2</Button> <Button Margin="3">button3</Button> </StackPanel>
與StackPanel面板類型, WarpPanel面板也是以行或列的形式進(jìn)行元素排列, 默認(rèn)情況下, WarpPanel面板的Orientation屬性則為Horizontal,元素以橫向進(jìn)行排列。
注意:與StackPanel面板不同的是, WarpPanel默認(rèn)情況下, 所有元素均不會(huì)被拉伸。這里要強(qiáng)調(diào)的一點(diǎn): StackPanel中, 元素會(huì)根據(jù)Orientation屬性進(jìn)行拉伸,
1.當(dāng)Orientation="Horizontal"時(shí), 元素被垂直拉伸
2.當(dāng)Orientation="Vertical"時(shí), 元素被水平拉伸
示例圖:
同樣的, WarpPanel面板具備StackPanel的屬性。區(qū)別則在于上面的不同。
用過(guò)winform的小伙伴應(yīng)該都知道, 在winform中, 幾乎所有的空間都具備Dock??繉傩? 可以針對(duì)元素進(jìn)行單獨(dú)設(shè)置Dock定位。然而在WPF中, 這點(diǎn)顯然是不具備的。
所以對(duì)于靈活的WPF來(lái)說(shuō), DockPanel面板具備了這個(gè)能力。凡是包含在DockPanel面板中的子元素, 都會(huì)具備Dock附加屬性。
下圖所示, 對(duì)DockPanel進(jìn)行簡(jiǎn)單的添加元素設(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中最后一個(gè)元素的會(huì)具備填充效果。如上圖的button3元素
LastChildFill 字面意思則可以理解, 最后一個(gè)元素是否填充。通過(guò)設(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屬性默認(rèn)在元素中都是從0開(kāi)始索引, 在下面示例中,為了演示都進(jìn)行了添加(如果在程序中,位置已經(jīng)確定, 可以默認(rèn)不加)。
定義行與列( 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個(gè)按鈕, 下圖所示:
代碼所示:
<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>
注意:盡管一個(gè)單元格中, 允許放置多個(gè)元素, 通常來(lái)說(shuō)這沒(méi)有什么意義。如上所示, 每個(gè)元素都明確了對(duì)應(yīng)單元格中。
Grid與WarpPanel和StackPanel面板等容器不同得區(qū)別在于, Grid需要顯式定義行與列來(lái)放置元素。而相對(duì)于其他容器,則會(huì)隱式創(chuàng)建行與列。
調(diào)整行和列:
Grid面板支持3種設(shè)置尺寸的方式:
硬編碼尺寸 | width="xxx" / height="xxx" |
自動(dòng)設(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>
實(shí)際的顯示效果可以看到, 第一列width="*" 為第二列的1/2, 第一行設(shè)置的自適應(yīng)高度, 而第二行則是硬編碼的高度 100
注意: 當(dāng)使用Grid進(jìn)行按比例設(shè)置列或者行時(shí), 如果Grid寬度為奇數(shù)像素, 那么被分割的行列像素帶小數(shù), 當(dāng)改列包含形狀元素、邊框、圖像, 那么顯示內(nèi)容可能是模糊的,
如果這個(gè)問(wèn)題影響布局, 則只需要將Grid的UseLayoutRounding屬性設(shè)置為True即可。
跨行與跨列:
處于Grid中的任意元素, 都具有兩個(gè)附加屬性, 分別為 RowSpan與 ColumnSpan。像這種跨行跨列在web應(yīng)用中十分常見(jiàn)。
下面的示例中演示了如何針對(duì)元素進(jìn)行跨列顯示:
與Grid相反, UniformGrid并不遵循Grid的眾多原則, 無(wú)論是顯式聲明行和列, 還有其附加屬性。反而, 通過(guò)簡(jiǎn)單的設(shè)置
Rows和Columns屬性來(lái)設(shè)定其尺寸。每個(gè)單元格都被均勻分配, 關(guān)鍵一點(diǎn), 所有元素最后都根據(jù)其定義的先后順序放置在
單元格中。
示例代碼如下:
<UniformGrid Rows="2" Columns="2"> <Button>button1</Button> <Button>button2</Button> <Button>button3</Button> <Button>button4</Button> </UniformGrid>
Canvas面板允許使用精準(zhǔn)的坐標(biāo)放置元素, 為了在Canvas面板中定位一個(gè)元素, 需要設(shè)置Canvas.Left 和 Canvas.Top屬性。
Code:通過(guò)設(shè)置元素的附加屬性 Canvas.Left 、Top、Right、Bottom 等進(jìn)行元素定位
<Canvas> <Button Canvas.Left="100" Canvas.Top="50">button1</Button> <Button Canvas.Left="100" Canvas.Top="80">button2</Button> </Canvas>
讀到這里,這篇“WPF常見(jiàn)布局面板怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。