做國(guó)外的網(wǎng)站網(wǎng)絡(luò)推廣優(yōu)化服務(wù)
UniformGrid控件(均分布局)
UniformGrid和Grid有些相似,只不過(guò)UniformGrid的每個(gè)單元格面積都是相等的,不管是橫向的單元格,或是縱向的單元格,它們會(huì)平分整個(gè)UniformGrid。
UniformGrid控件提供了3個(gè)屬性,分別是FirstColumn、Columns 、Rows 。FirstColumn表示第一行要空幾個(gè)單元格,后面兩個(gè)屬性分別用于設(shè)置行數(shù)和列數(shù)。
1. 默認(rèn)情況
這是我們沒(méi)有UniformGrid的屬性的效果,它會(huì)根據(jù)子元素的數(shù)量和UniformGrid自身的尺寸來(lái)決定行數(shù)和列數(shù)。
<UniformGrid><Button Content="1" Margin="2"/><Button Content="2" Margin="2"/><Button Content="3" Margin="2"/><Button Content="4" Margin="2"/></UniformGrid>
2. 設(shè)置參數(shù)
設(shè)計(jì)當(dāng)前UniformGrid為3行3列,同時(shí)設(shè)置第一行第一個(gè)單元格保持空白。
<UniformGrid FirstColumn="1" Rows="3" Columns="3"><Button Content="1" Margin="2"/><Button Content="2" Margin="2"/><Button Content="3" Margin="2"/><Button Content="4" Margin="2"/></UniformGrid>
3. 總結(jié)
UniformGrid控件使用非常簡(jiǎn)單方便,通常用于局部的布局。
StackPanel控件(棧式布局)
StackPanel用于水平或垂直堆疊子元素。也就是說(shuō),StackPanel同樣也有一個(gè)Children屬性,而Children集合中的元素呈現(xiàn)在界面上時(shí),只能是按水平或垂直方式布局。
public class StackPanel : Panel, IScrollInfo, IStackMeasure
{public static readonly DependencyProperty OrientationProperty;public StackPanel();public double HorizontalOffset { get; }public double ViewportHeight { get; }public double ViewportWidth { get; }public double ExtentHeight { get; }public double ExtentWidth { get; }public bool CanVerticallyScroll { get; set; }public bool CanHorizontallyScroll { get; set; }public Orientation Orientation { get; set; }public double VerticalOffset { get; }public ScrollViewer ScrollOwner { get; set; }protected internal override Orientation LogicalOrientation { get; }protected internal override bool HasLogicalOrientation { get; }public void LineDown();public void LineLeft();public void LineRight();public void LineUp();public Rect MakeVisible(Visual visual, Rect rectangle);public void MouseWheelDown();public void MouseWheelLeft();public void MouseWheelRight();public void MouseWheelUp();public void PageDown();public void PageLeft();public void PageRight();public void PageUp();public void SetHorizontalOffset(double offset);public void SetVerticalOffset(double offset);protected override Size ArrangeOverride(Size arrangeSize);protected override Size MeasureOverride(Size constraint);}
StackPanel提供了一些屬性和方法,最常用的是Orientation枚舉屬性,用于設(shè)置子控件在StackPanel內(nèi)部的排列方式,分別是水平排列(Horizontal)和垂直排列(Vertical)。默認(rèn)值是垂直排列(Vertical)。
1. 垂直排列
<StackPanel Orientation="Vertical"><Button Content="1" Margin="20" /><Button Content="2" Margin="20" /><Button Content="3" Margin="20" /><Button Content="4" Margin="20" /></StackPanel>
注意:
當(dāng)StackPanel子元素處于垂直排列時(shí),此時(shí)子元素的寬度默認(rèn)與StakcPanel的寬度保持一致,但是子元素的高度是與其自身的高度自適應(yīng)顯示。
2. 水平排列
<StackPanel Orientation="Horizontal"><Button Content="1" Margin="20" /><Button Content="2" Margin="20" /><Button Content="3" Margin="20" /><Button Content="4" Margin="20" /></StackPanel>
注意:
當(dāng)StackPanel子元素處于水平排列時(shí),此時(shí)子元素的高度默認(rèn)與StakcPanel的高度保持一致,但是子元素的寬度是與其自身的寬度自適應(yīng)顯示。
3. StackPanel控件復(fù)雜使用
可以利用子控件的HorizontalAlignment屬性或VerticalAlignment來(lái)設(shè)置子控件在StackPanel內(nèi)部的顯示位置,比如在垂直排列布局模式下,可以設(shè)置HorizontalAlignment屬性值,Left表示顯示在左則,Right顯示在右則,Center則居中顯示,Stretch表示拉伸填充顯示。
需要注意的是,由于WPF的控件布局都是采用自適應(yīng)計(jì)算每個(gè)控件的位置,所以在設(shè)置了HorizontalAlignment或VerticalAlignment后,子控件的寬度和高度都會(huì)重新計(jì)算,主要是根據(jù)自身內(nèi)容的尺寸計(jì)算。
<ScrollViewer><StackPanel Orientation="Vertical"><Button Content="1" Margin="20" HorizontalAlignment="Left"/><Button Content="2" Margin="20" HorizontalAlignment="Right"/><Button Content="3" Margin="20" HorizontalAlignment="Center"/><Button Content="4" Margin="20" HorizontalAlignment="Stretch"/><Button Content="5" Margin="20" /><Button Content="6" Margin="20" /><Button Content="7" Margin="20" /><Button Content="8" Margin="20" /><Button Content="9" Margin="20" /></StackPanel></ScrollViewer>
我們可以看到上圖中前三行的按鈕都是根據(jù)自身內(nèi)容的寬高自適應(yīng)繪制的。另外,如果StackPanel內(nèi)部的子控件太多,則需要配合滾動(dòng)條容器ScrollViewer控件。