一、基础知识

1、所有WPF布局容器都派生自System.Windows.Controls.Panel抽象类的面板;

2、WPF种核心布局面板有StackPanel(栈面板)、WrapPanel(环绕面板)、DockPanel(停靠面板)、Grid(网格面板)、UniformGrid(均匀面板)、Canvas(画布)

二、实例

1、StackPanel(栈面板):特点是在水平或垂直的堆栈中放置元素,每个元素各占一行或者一列,这个布局容器通常用于大的、复杂的窗口中的一些小区域

默认情况下,StackPanel面板自上而下的顺序排列元素,使每个元素的高度适合它的内容

1.1垂直布局

<Grid>
<StackPanel>
<Button Name="btn1" Content="Button1" />
<Button Name="btn2" Content="Button2" />
<TextBox Name="txtDemo" Background="Red" />
<CheckBox Name="cbDemo" Content="男" />
<RadioButton Name="rbMan"
Content="男"
GroupName="rbSex" />
<RadioButton Name="rbWomen"
Content="女"
GroupName="rbSex" />
</StackPanel>
</Grid>

1.2水平布局

<StackPanel Orientation="Horizontal">

2、WrapPanel(环绕面板):WrapPanel面板在可能的空间中,以一次一行或一列的方式布局控件,在水平方向上,WrapPanel面板从左向右放置条目,然后在随后的行中放置元素,在垂直方向上,WrapPanel面板自上而下的列种放置元素,并使用附加的列放置剩余的条目。

通过Orientation属性来设置

<WrapPanel Orientation="Vertical">
<Button Name="btn1" Content="btn1" Margin=""/>
<Button Name="btn2" Content="btn2" Margin=""/>
<Button Name="btn3" Content="btn3" Margin=""/>
<Button Name="btn4" Content="btn4" Margin=""/>
<Button Name="btn5" Content="btn5" Margin=""/>
</WrapPanel>

3、DockPanel(停靠面板):根据容器的整个边界调整元素,默认情况下后添加的元素只能使用剩余的空间,最后一个元素可以占据所有剩余空间

<Grid>
<DockPanel LastChildFill="false">
<Button Name="btn1"
Content="Dock.Top"
DockPanel.Dock="Top" />
<Button Name="btn2"
Content="Dock.Left"
DockPanel.Dock="Left" />
<Button Name="btn3"
Content="Dock.Right"
DockPanel.Dock="Right" />
<Button Name="btn4"
Content="Dock.Bottom"
DockPanel.Dock="Bottom" />
<Button Name="btn5" Content="Dock" />
</DockPanel>
</Grid>

默认情况下最后一个元素填充剩余空间

4、Grid面板:通过使用对象填充Grid.RowDefinitions和Grid.ColumnDefinations集合来创建网格和行 可以用ShowGridLines="True"来显示网格

<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Name="btn1"
Grid.Row=""
Grid.Column=""
Content="第一行第一列" />
<Button Name="btn2"
Grid.Row=""
Grid.Column=""
Grid.ColumnSpan=""
Background="Green"
Content="第一行第二、三列" />
<Button Name="btn3"
Grid.Row=""
Grid.RowSpan=""
Grid.Column=""
Background="Gray"
Content="第二、三行第一列" />
<Grid Grid.Row=""
Grid.Column=""
ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Name="txtDemo"
Grid.Row=""
Grid.Column=""
Background="Azure"/>
</Grid>
</Grid>

三、混合实例

3.1类似连连看布局

源码下载:布局连连看.zip

3.2中国八大名菜系列布局

源码下载:PanelDemo.zip

3、WPF学习之-布局的更多相关文章

  1. WPF学习(3)布局

    今天我们来说说WPF的布局.我们知道WinForm的布局主要是采用基于坐标的方式,当窗口内容发生变化时,里面的控件不会随之动态调整,这就造成了一个很不好的用户体验.而WPF为了避免这个缺点,采用了基于 ...

  2. 迟到的 WPF 学习 —— 布局

    布局是 WPF 很重头的一部分内容,这一部分梳理和记录关于布局章节的知识点. 1. WPF 使用一种基于流(Flow-based)的概念来处理布局逻辑,将传统的基于"坐标"的思想尽 ...

  3. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  4. WPF学习开发客户端软件-任务助手(已上传源码)

    本人纯属WPF新手,布局和WPF的开发水平相当欠缺,从个人来说,还是比较喜欢WPF的,有人说WPF是界面加上WINFORM,我不这样认为,WPF与WINFORM主要的不同在于数据绑定.   这个软件虽 ...

  5. WPF学习05:2D绘图 使用Transform进行控件变形

    在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...

  6. WPF学习笔记3——Layout之1

    一.概述 了解XAML的基本之后,进入Layout的学习.Layout,即布局,可能需要用到几种不同的容器.每一种容器都有各自的逻辑.在用户界面的设计过程中,很多时候是在想办法使得界面更加吸引.实在. ...

  7. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  8. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  9. WPF学习:3.Border & Brush

    上一章<WPF学习:2.Layout-Panels-Countainers>主要介绍了布局,容器和面板.这一章主要开始介绍Border(边界)和Brush(画刷). 代码地址:http:/ ...

随机推荐

  1. request 和response 中的setCharacterEncoding区别

    response和request的setCharacterEncoding 一.request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值. 指 ...

  2. velocity基本用法

    1.定义变量 #set($root="www");#set($name="index.vm");#set($tmp="$root/$name" ...

  3. 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析

    TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解.      要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...

  4. linux进程间通信概述

    一个大型的应用系统,往往需要众多进程协作,进程间通信的重要性显而易见. 进程间通信有如下一些目的: 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间. 共享数据: ...

  5. 转: OpenResty最佳实践

    https://moonbingbing.gitbooks.io/openresty-best-practices/content/ centOS安装另加内容 ln -sf luajit-2.1.0- ...

  6. ios获取当前语言

    上代码: + (NSString*)getPreferredLanguage { NSUserDefaults * defaults = [NSUserDefaults standardUserDef ...

  7. JAVA鼠标屏幕绘制拖拽删除矩形

    import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; ...

  8. Javascript之计时

    // <!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; chars ...

  9. Javascript之三种按钮点击事件

    学习Javascript必须要先掌握基本的事件方法和语法,这些都是我们学过的也是最基本的.以前忘了总结,所以现在回顾,综合地总结一下,温故而知新. Javascript有三种按钮点击事件,分别为ale ...

  10. Linux命令(7):rm命令

    1.作用: 删除一个目录中的一个或多个文件或目录: 2.格式: rm  [选项] 文件或目录 3.常见参数: 4.使用实例: [root@www hello]# rm –r -i ./why 5.使用 ...