WPF布局之Grid

1.Grid

   Grid是以表格形式组织控件的一种布局方式,与Java AWT中的GridLayout类似,但区别在于

WPF中的Grid的每一个单元格中可以放置多个控件,但控件可能会层叠在一起

WPF中的Grid支持单元格的合并,类似于HTML中的table td中的rowspan和colspan

Grid中的行和列可以自定义高度(Height)和宽度(Width)

在设置高度和宽度时可以采用两种写法:

          1)Height=”60”:不加“星号”表示固定的高度

2)Height=”60*”:加“星号”表示“加权”的高度,在调整窗体大小时,此高度或宽度会按窗体大小改变的比例进行缩

如代码:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="202*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button Grid.Column="0" Grid.Row="0" Height="30" VerticalAlignment="Top">ButtonA</Button>
        <Button Grid.Column="0" Grid.Row="0" Height="30" VerticalAlignment="Bottom">ButtonB</Button>
        <Button Grid.Column="1" Grid.Row="0">ButtonC</Button>
        <Button Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2">ButtonD</Button>
    </Grid>

生成的效果为:类似与table中的布局模式

2.GridSplit

GridSplit控件结合Grid控件实现类似于Windows应用程序中SplitContainer的功能,即分区域且可拖动大小

如下面的例子,代码:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="88*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="190*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="172*" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="90*" />
        </Grid.RowDefinitions>
        <Button Content="ButtonA" Margin="3" Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" />
        <Button Content="ButtonB" Margin="3" Grid.Row="0" Grid.Column="2" />
        <Button Content="ButtonC" Margin="3" Grid.Row="2" Grid.Column="2" />
        <GridSplitter Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                    Grid.Row="0" Grid.Column="1" Grid.RowSpan="3"></GridSplitter>
        <GridSplitter Height="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                   Grid.Row="1" Grid.Column="2"></GridSplitter>
    </Grid>

实现的效果如下图所示,红色标记的区域可进行左右,上下拖动来更改各区域的大小。

 

代码说明:首先在Grid中定义一个3行3列的区域,ButtonA放置于0行0列,高度占据3行,ButtonB放置于0行2列,ButtonC放置于2行2列,然后分别在第1列和第1行2列放置一个GridSplit用于分割各区域。如下图所示。

3.UniformGrid

UniformGrid 控件为控件提供了一种简化的网格布局。当控件添加到 UniformGrid 时,它们会排列在一个网格模式中,该网格模式会自动调整以使控件之间的距离保持均匀。单元格的数目将进行调整,以适应控件的数目。例如,如果四个控件添加到 UniformGrid 中,它们将安排在包含四个单元格的网格中。

如代码:

<UniformGrid>
  <Button Content="ButtonA" />
  <Button Content="ButtonB" />
  <Button Content="ButtonC" />
  <Button Content="ButtonD" />
  <Button Content="ButtonE" />
  <Button Content="ButtonF" />
  <Button Content="ButtonG" />
  <Button Content="ButtonH" />
  <Button Content="ButtonI" />
  <Button Content="ButtonJ" />
</UniformGrid>

效果图:

  

在上图中,虽然button个数为10个,但是仍然会生成4*4个单元格,随着窗体大小变化,各Button的大小保持一致,位置不变。

在使用UniformGrid的时候:

各单元格的大小完全相同

    单元格的数量取决于放入的控件的数量,且单元格一定是行、列数相同的,即1*1、2*2、3*3、4*4…的单元格分布

 

时间: 2024-08-09 06:18:26

WPF布局之Grid的相关文章

WPF快速入门系列(1)——WPF布局概览

一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中主要的几个不同的特性,如依赖属性.命令.路由事件等. 在正式介绍之前,我还想分享下为什么我又要重新捡起来WPF呢?之前没有记录下来的原来主要是打算走互联网方向的,后面发现互联网方向经常加班,又累,有时候忙的连自己写了什么都不知道的,所以后面机缘巧合地进了一家外企,在外企不像互联网行业那样,比较清楚,有更多的时

WPF布局的6种面板

WPF用于布局的面板主要有6个,StackPanel(栈面板).WrapPanel(环绕面板).DockPanel(停靠面板).Canvas(画布).Grid(网格面板)和 UniformGrid(均布网格).一下详细介绍几种面板各自的特点: 1.StackPanel 栈面板,可以将元素排列成一行或者一列.其特点是:每个元素各占一行或者一列.Orientation属性指定排列方式:Vertical(垂直)[默认].Horizontal(水平).默认情况下,水平排列时,每个元素都与面板一样高:垂直

WPF 10天修炼 - WPF布局容器

WPF布局 WPF的窗口也就是Window类,是一个内容控件,该控件派生自ContentControl.内容控件有一个Content属性,该属性有一个限制,只能放置一个用户界面元素,或一个字符串.为了在窗口上放置多个界面控件,通常在窗口上放置一个容器控件. WFP布局原则 1.  元素不应该指定 确定的尺寸大小,同很惨更应该使其大小自动适应内容.比如按钮根据所添加的文本来扩展其大小.可以通过设置maximun和minimun尺寸来限制控件可接受的尺寸大小. 2.  元素不应该使用屏幕坐标来指定其

对比MFC资源文件谈谈WPF布局方式

对比MFC资源文件谈谈WPF布局方式 MFC方式 对于传统的MFC基于UI的应用程序设计通常分两步走,首先是设计UI,使用的是RC文件,然后是代码文件,对RC文件进行操作,如下面Figure 1 的基于对话框的应用程序,其对应的代码如Figure 2所示,这就是MFC时代的所见即所得,如大家所见,每个控件的代码都和位置都是写死的坐标,这样会带来的问题是当你改变系统运行的的DPI或者软件需要支持本地化的时候,由于有的语言对于同样的意思需要比较长的文字表示,就会带来文字显示不下或者显示不完整的情况.

WPF布局控件常用属性介绍

WPF布局控件常用属性介绍 其它 | 作者:慧都控件网 | 2011-04-06 13:41:57| 阅读 0次 有用(0) 评论(0) 概述:WPF布局控件都是派生自System.Windows.Controls.Panel抽象类的面板,Panel类继承自 FrameworkElement,Panel类本身并没有什么特别的,但是WPF中提供了许多用于布局的控件都继承自Panel类,如 StackPanel控件,WrapPanel,DockPanel,Grid,UniformGrid,Canva

WPF 布局总结

一.WPF布局原理 WPF窗口只能包含单个元素,为在WPF窗口中放置多个元素,需要放置一个容器,让后在容器中添加其他元素.“理想的”WPF窗口需遵循以下几个原则: 1.不应显示设定元素的尺寸.元素应当可以改变尺寸适合他们的内容,如添加更多文字内容时,按钮会适当扩展.设置最大,最小尺寸,控制尺寸范围. 2.不应使用确定坐标确定元素的位置.元素应当由容器根据他们的尺寸,按一定的顺序进行排列.Margin属性可添加空白空间. 3.布局容器的子元素“共享”可用空间.布局容器根据每个元素的内容尽可能的为元

学习WPF1.2——WPF布局——了解布局容器

WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是一个递归的过程,界面中任何一个容器元素都会被遍历到 WPF布局容器的继承机制 DispatcherObject WPF应用程序使用单线程亲和模型(STA:Single-Thread Affinity),这意味着整个用户界面都为单个线程拥有,同时也意味着从另一个线程与用户界面元素交互是不安全的,但有很多情况下

WPF布局容器

原文:WPF布局容器 1.StackPanel:堆栈面板,通过Orientation属性设置子元素的布局排列方向为"Vertical"(垂直)和"Horizontal"(水平),不写其默认值为"Vertical",当设置为"Vertical"时子元素会沿垂直方向拉伸,反之设置为"Horizontal"时子元素会沿水平方向拉伸. 2.DockPanel:支持子元素停靠在面板的任意一条边上,通过附加属性Dock

【WPF学习】第十章 WPF布局示例

前几章用了相当大的篇幅研究有关WPF布局容器的复杂内容.在掌握了这些基础知识后,就可以研究几个完整的布局示例.通过研究完整的布局示例,可更好的理解各种WPF布局概念在实际窗口中的工作方式. 一.列设置 布局容器(如Grid面板)使得窗口创建整个布局结构变得非常容易.例如,分析如下显示的窗口及设置.该窗口在一个表格结构中排列各个组件——标签.文本框以及按钮. 为创建这一表格,首先定义网格的行和列.行定义足够简单——只需要将每行的尺寸设置为所含内容的高度.这意味着所有行都将使用最大元素的高度,在该示