• WPF8 UI布局


    WPF中的布局元素有如下几个:

    1、Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于HTML中的Table。

    2、StackPanel:栈式面板。将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移动以填充空缺。

    3、Canvas:画布。内部元素可以使用以像素为单位的绝对坐标进行定位,类似于WindowsForm的布局方式。

    4、DockPanel:泊靠式面板。内部元素可以选择泊靠方向,类似于在WindowsForm编程中设置控件的Dock属性。

    5、WrapPanel:自动拆行面板。内部元素在排满一行后能够自动拆行,类似于HTML中的流式布局。

    一、Grid

    Grid元素会以网格形式对内容元素进行布局。

    Grid特点为:

    1、可以定义任意数量的行和列,非常灵活

    2、行的高度和列的宽度可以使用绝对数值、相对比例或自动调整的方式进行精确设定,并可以设置最大最小值。

    3、内部元素可以设置自己的所在行和列,还可以设置自己纵向跨几行、横向跨几列。

    Grid布局适合于:

    1、UI布局的大框架设计

    2、大量UI元素需要成行或者成列对齐的情况

    3、UI整体尺寸改变时,元素需要保持固有的高度和宽度比例

    4、UI后期可能有较大变更或扩展。

    定义Grid的行和列

    Grid类具有ColumnDefinitions和RowDefinitions两个属性,分别用于定义Grid有多少列、多少行。实际工作中,还可以进一步定制每行每列的高和宽,可以设置3类值:

    1、绝对值,为double数值加上单位后缀,例如30px,0.5cm

    2、比例值,为double数值后加上一个*

    3、自动值,字符串Auto

    绝对值一旦设定就不会改变,所以又称固定值,适用于控件狂傲都不需要改变的情况。比例值是百分比,2*表示占据剩余未分配数值的20%,例如一个150px高度的Grid,有5行,其中2行使用25px的绝对值,剩下三行分别是2*,1*,2*,则实际所占元素分别为(150-50)/5再乘以系数,为40px,20px,40px。

    如果使用自动值Auto为行高或列宽,那么行高或列宽的实际值将有行列内控件的高度和宽度决定,即控件会把行列撑到合适的宽度和高度,如果行列中没有控件,则行高和列宽均为0.

    行和列都是从0开始计数;

    指定一个控件在某行,就为这个控件的标签添加Grid.Row=“行编号”这样一个Attribute,若行编号为0(即控件位于首行)则可以省略这个Attribute,列同理。

    若控件要跨多个行和列,则使用Grid.RowSpan="行数"和Grid.ColumnSpan=“列数”两个Attribute。

    <Window x:Class="WPF_XAML_4.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="240" Width="400"
            MinHeight="200" MinWidth="340" MaxHeight="400" MaxWidth="600">
        <Grid Margin="10">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="80"/>
                <ColumnDefinition Width="4"/>
                <ColumnDefinition Width="80"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="4"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="4"/>
                <RowDefinition Height="25"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Select Department and Comment:" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"/>
            <ComboBox Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="4"/>
            <TextBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="5" BorderBrush="Black"/>
            <Button Content="Submit" Grid.Column="2" Grid.Row="4"/>
            <Button Content="Delete" Grid.Column="4" Grid.Row="4"/>
        </Grid>
    </Window>

    二、StackPanel

    StackPanel可以把内部元素在纵向或横向上紧凑排列。形成栈式布局,当移除前面的元素,后面的元素会整体向前移动、补占原有元素的控件。

    StackPanel适合于:

    1、同类元素需要紧凑排列(菜单或列表)

    2、移除其中的元素后能够自动补缺的布局或动画

    StackPanel使用3个属性来控制内部元素的布局,orientation,horizontalAlignment、verticalAlignment,后两者绝对内部元素水平和垂直方向上的对齐方式,orientation则决定内部元素是横向累积还是纵向累积,可以取Horizontal或Vertical两个可取值。

    三、Canvas

    Canvas即画布,Canvas类似于Winform的布局,控件被放于Canvas时,就会被附加上CanvasX和CanvasY属性,Canvas适合于一些设计基本上不会有改动的小型布局,例如logo和艺术性较强的布局,依赖于横纵坐标的动画,需要大量使用横纵坐标进行绝对点定位的布局。

    四、DockPanel

    DockPanel内的元素会被附加上DockPanel.Dock这个属性,这个属性的数据类型为Dock枚举,Dock枚举可以取Left、Top、Right和Bottom四个值。根据Dock属性值,DockPanel内的元素会向指定方向累积。

            <DockPanel>
                <TextBox DockPanel.Dock="Top" Height="25" BorderBrush="Black"></TextBox>
                <TextBox DockPanel.Dock="Left" Width="150" BorderBrush="Black"></TextBox>
                <TextBox BorderBrush="Black"/>
            </DockPanel>

     五、WrapPanel

    WrapPanel内部采用的是流式布局。WrapPanel使用Orientation属性来控制流延伸的方向,使用HorizontalAligment和VerticalAlignment两个属性控制内部控件的对齐,在流延伸的方向上,WrapPanel会排列尽可能多的控件,排不下的控件将会新起一行或一列继续排列。

  • 相关阅读:
    saiku导出excel单元格格式与中文列宽自动适应
    saiku中过滤窗口优化及隐藏异常报错
    saiku之固定维度(必选维度)
    saiku中多cube排序问题
    saiku中默认级别all的国际化
    Nginx基本配置、性能优化指南
    Nginx安装部署
    64位虚拟机中安装CentOS_6.7
    memcached全面剖析–5. memcached的应用和兼容程序
    memcached全面剖析–4. memcached的分布式算法
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/13037937.html
Copyright © 2020-2023  润新知