WPF布局

大家都知道,UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感觉这个软件没有多少使用价值
WPF作为专业的界面技术,布局功能是它的核心技术之一。友好的用户界面和良好的用户体验离不开设计精良的布局。日常工作中,WPF设计师最大的工作量就是布局和动画,WPF的布局控件都在System.Windows.Controls.Panel这个基类下面,使用 WPF提供的各种控件在WPF应用程序中界面进行布局,同时对各种子控件(如按钮、文本框,下拉框等)进行排列组合
布局系统为Panel中的每个子控件完成两个处理过程:测量处理过程(Measure)和排列处理过程(Arrange)。每个子 Panel 均提供自己的 MeasureOverride 和 ArrangeOverride 方法,以实现自己特定的布局行为
WPF用于布局的面板主要有6个,StackPanel(栈面板)、WrapPanel(环绕面板)、DockPanel(停靠面板)、Canvas(画布面板)、Grid(网格面板)和UniformGrid(均布网格)
Grid:网格面板。顾名思义就是“网格”,以表格形式布局元素,可以自定义行和列并通过行列的数量、行高列宽来调整控件的布局,行的高度和列的宽度可以使用绝对值、相对比例或自动调整的方式进行精确设定,并可以设置最大和最小值,内部元素可以设置自己所在的行和列,还可以设置自己纵向跨几行,横向跨几列,近似Html中的table
WPF布局
尽管Grid面板被设计成不可见的,但可将Grid.ShowGridLines属性设置为True,从而更清晰的观察Grid面板,方便调试,可以更准确地控制Grid面板如何选择列宽和行高。如果不知道Grid.Row属性,Grid面板会假定该属性的值为0。对于Grid.Column属性也是如此。因此,在Grid面板的第一个单元格中放置元素时可不指定这两个属性值
Canvas:画布面板。布局控件中最为简单的一种,用于完全控制每个元素的精确位置,内部元素可以使用以像素为单位的绝对坐标进行定位,类似于Windows Form的布局方式,Canvas允许子元素的部分或全部超过其边界,默认不会裁剪子元素,同时可以使用负坐标,即溢出的内容会显示在Canvas外面,这是因为默认 ClipToBounds=”False”
WPF布局
注意:Canvas内的子控件不能使用两个以上的Canvas附加属性,如果同时设置Canvas.Left和Canvas.Right属性,那么后者将会被忽略

StackPanel:栈式面板。可以将元素排列成一行或者一列,其特点是:每个元素各占一行或者一列,当移除一个元素后,后面的元素会自动向前填充空缺。同类元素需要紧凑排列(如制作菜单和列表),移除其中的元素后能够自动补缺的布局或者动画,如果包含的元素超过了面板空间,它只会截断多出的内容,元素的Margin属性用于使元素之间产生一定得间隔,当元素空间大于其内容的空间时,剩余空间将由HorizontalAlignment和 VerticalAlignment属性来决定如何分配,Orientation属性指定排列方式:默认Vertical(垂直)、Horizontal(水平)
WPF布局
当把StackPanel的FlowDirection属性设置为RightToLeft,Orientation属性设置为Horizontal,StackPanel将从右向左排列元素
DockPanel:泊靠式面板。也叫停靠式面板,DockPanel定义一个区域,在此区域中,可以使子元素通过描点的形式排列,内部元素可以选择泊靠的方向(上下左右),类似于Winform中设置控件的Dock属性,在DockPanel中,指定停靠边的控件,会根据定义的顺序占领边角,所有控件绝不会交叠
WPF布局
默认情况下,后添加的元素只能使用剩余空间,无论对DockPanel的最后一个子元素设置任何停靠值,该子元素都将始终填满剩余的空间。如果不希望最后一个元素填充剩余区域,可以将DockPanel属性LastChildFill设置为false,还必须为最后一个子元素显式指定停靠方向

WrapPanel:自动折行面板。内部元素在长度或高度不够时能够自动折行,类似于Html中的流式布局。Orientation——根据内容自动换行。当Orientation属性的值设置为 Horizontal:元素是从左向右排列的,然后自上至下自动换行(Vertical:元素是从上向下排列的,然后从左至右自动换行)
WPF布局
UniformGrid:均布网格面板,Grid的简化版,每个单元格的大小相同,不需要定义行列集合。每个单元格始终具有相同的大小,每个单元格只能容纳一个控件,将自动按照定义在其内部的元素个数,自动创建行列,并通常保持相同的行列数。UniformGrid中没有Row和Column附加属性,也没有空白单元格。与Grid相比,UniformGrid很少使用。Grid面板是用于创建简单乃至复杂窗口布局的通用工具。UniformGrid面板是一种更特殊的布局,主要用于在一个刻板的网格中快速地布局元素
WPF布局