一、基础知识

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

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

二、实例

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

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

1.1垂直布局

  1. <Grid>
  2. <StackPanel>
  3. <Button Name="btn1" Content="Button1" />
  4. <Button Name="btn2" Content="Button2" />
  5. <TextBox Name="txtDemo" Background="Red" />
  6. <CheckBox Name="cbDemo" Content="男" />
  7. <RadioButton Name="rbMan"
  8. Content="男"
  9. GroupName="rbSex" />
  10. <RadioButton Name="rbWomen"
  11. Content="女"
  12. GroupName="rbSex" />
  13. </StackPanel>
  14. </Grid>

1.2水平布局

  1. <StackPanel Orientation="Horizontal">

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

通过Orientation属性来设置

  1. <WrapPanel Orientation="Vertical">
  2. <Button Name="btn1" Content="btn1" Margin=""/>
  3. <Button Name="btn2" Content="btn2" Margin=""/>
  4. <Button Name="btn3" Content="btn3" Margin=""/>
  5. <Button Name="btn4" Content="btn4" Margin=""/>
  6. <Button Name="btn5" Content="btn5" Margin=""/>
  7. </WrapPanel>

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

  1. <Grid>
  2. <DockPanel LastChildFill="false">
  3. <Button Name="btn1"
  4. Content="Dock.Top"
  5. DockPanel.Dock="Top" />
  6. <Button Name="btn2"
  7. Content="Dock.Left"
  8. DockPanel.Dock="Left" />
  9. <Button Name="btn3"
  10. Content="Dock.Right"
  11. DockPanel.Dock="Right" />
  12. <Button Name="btn4"
  13. Content="Dock.Bottom"
  14. DockPanel.Dock="Bottom" />
  15. <Button Name="btn5" Content="Dock" />
  16. </DockPanel>
  17. </Grid>

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

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

  1. <Grid>
  2. <Grid.RowDefinitions>
  3. <RowDefinition />
  4. <RowDefinition />
  5. <RowDefinition />
  6. </Grid.RowDefinitions>
  7. <Grid.ColumnDefinitions>
  8. <ColumnDefinition />
  9. <ColumnDefinition />
  10. <ColumnDefinition />
  11. </Grid.ColumnDefinitions>
  12. <Button Name="btn1"
  13. Grid.Row=""
  14. Grid.Column=""
  15. Content="第一行第一列" />
  16. <Button Name="btn2"
  17. Grid.Row=""
  18. Grid.Column=""
  19. Grid.ColumnSpan=""
  20. Background="Green"
  21. Content="第一行第二、三列" />
  22. <Button Name="btn3"
  23. Grid.Row=""
  24. Grid.RowSpan=""
  25. Grid.Column=""
  26. Background="Gray"
  27. Content="第二、三行第一列" />
  28. <Grid Grid.Row=""
  29. Grid.Column=""
  30. ShowGridLines="True">
  31. <Grid.RowDefinitions>
  32. <RowDefinition />
  33. <RowDefinition />
  34. </Grid.RowDefinitions>
  35. <Grid.ColumnDefinitions>
  36. <ColumnDefinition />
  37. <ColumnDefinition />
  38. </Grid.ColumnDefinitions>
  39. <TextBox Name="txtDemo"
  40. Grid.Row=""
  41. Grid.Column=""
  42. Background="Azure"/>
  43. </Grid>
  44. </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. Android(java)学习笔记114:LayoutInflater和findViewById

    1. 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById(). 不同点是LayoutInflater是用来找res/layout/下的xml布局文件, ...

  2. envi5.1下载地址

    ENVI 5.1 installer 32 bit :链接: http://pan.baidu.com/s/1c0EGZIw 密码: gcogENVI 5.1 Installer 64 bit :链接 ...

  3. 用python理解web并发模型

    最简单的并发 import socket response = 'HTTP/1.1 200 OK\r\nConnection:Close\r\nContent-Length:11\r\n\r\nHel ...

  4. windows 端搭建nfs 服务器

    因为最近虚拟机桥连模式总是用不了会出问题,所以今天花了半个小时研究了一下在Windows主机下搭建一个nfs服务器进行文件传输. 其实步骤很简单,如下: 1. 下载NFS Windows服务器软件,我 ...

  5. linq检索带命名空间的xml

    XElement el = XElement.Load(fil); XNamespace ns = "http://schemas.microsoft.com/ado/2009/11/edm ...

  6. 基本STRUTS标签-学习笔记-Bean标签

    <bean:include> 和标准的JSP标签<jsp:include>很相似,都可以用来包含其他Web资源的内容,区别在于<bean:include>标签把其它 ...

  7. Spring(3.2.3) - Beans(11): depends-on

    大多数情况下,Bean 之间的依赖非常直接:被依赖的 Bean 作为属性.在 XML 配置文件中最常见的就是使用 <ref/> 元素.在一些特殊情况下,Bean 之间的依赖不够直接.比如, ...

  8. Java Servlet-http协议

    ---恢复内容开始--- 互联网三大基石: url:定位数据 html:显示数据 http:传输数据

  9. 备忘====[HttpPost]和[AcceptVerbs(HttpVerbs.Post)]区别

    1.共同点:[HttpPost]和[AcceptVerbs(HttpVerbs.Post)]都是只接受POST请求过来的数据. 2.不同点:在MVC中如果想一个action既可以回应POST请求也可以 ...

  10. Android之简单页面跳转

    Uri.parse方法返回的是一个URL类型,通过URL可以访问一个网络上的或者本地资源,Intent()方法是调用哪个组件来打开这个URL. package com.example.web; imp ...