布局原则

WPF窗口只能包含单个元素。如果要放置多个元素,需要放置一个容器,然后在容器中添加元素。

  • 不应显示的设定元素的尺寸
  • 不应该使用屏幕坐标指定元素的位置
  • 布局容器的子元素”共享“可用的空间
  • 可嵌套的布局容器

前两个是为了使得WPF程序更加灵活,在不同的设备上能灵活适应,能处理动态内容。

总的目标都是为了创建更好更灵活的用户界面。

StackPanel面板

简单地在单行或单列中以堆栈方式放置其子元素。

默认按照自上而下地顺序排列元素。通过设置Orientation属性,可以更改排列方式。水平:Horizontal。

布局属性

名称 说明
HorizontalAlignment 水平方向定位
VerticalAlignment 垂直方向上定位
Margin 四周空间
MinWidth和MinHeight 最小尺寸
MaxWidth和MaxHeight 最大尺寸
Width和Height 显示设置尺寸

这些属性从FrameworkElement基类继承而来。

Border控件

包含一段嵌套内容(布局面板)。为其添加背景或在其周围添加边框。

名称 说明
Background 背景
BorderBrush和BorderThickness 边框颜色和边框宽度
CornerRadius 圆角。值越大,圆角效果越明显
Padding 在边框和内部的内容间添加空间

WrapPanel

在可能的空间中,以一次一行或一列的方式布局控件。

WrapPanel.Orientation属性设置为:

Horizontal:空间从左向右进行排列,再在下一行中排列。

Vertical:在多列中放置元素

DockPanel

沿着一条外边缘来拉伸所包含的控件。

可以通过Dock附加属性来设置子元素停靠的边。属性又Left、Right、Top和Bottom。

<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Top">Top Button</Button>
</DockPanel>

LastChildFill属性:是否将最后一个元素占满剩余的空间

Grid面板

WPF中功能最强大的布局容器。

创建步骤

  1. 选择希望使用的行和列的数量。

  2. 为每个包含的元素指定恰当的行和列。

    创建两行三列

<Grid ShowGridLines="True">
<Grid.RowDefinitions> <!--描述行-->
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions> <Grid.ColumnDefinitions> <!--描述列-->
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>

为在单元格中放置各个元素,需要使用Row和Column附加属性。这两个属性值都是从0开始的,和数组下标一样。

    <Grid ShowGridLines="True">
<Grid.RowDefinitions> <!--描述行-->
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions> <Grid.ColumnDefinitions> <!--描述列-->
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions> <Border Grid.Row="1" Grid.Column="0" Margin="5" Padding="5" Background="LightBlue" BorderBrush="SteelBlue" BorderThickness="3,5,3,5"
CornerRadius="3">
<StackPanel Margin="3">
<Label Margin="3" HorizontalAlignment="Center">
A Button Stack
</Label>
<Button Margin="3" MaxWidth="200" MinWidth="100">Button 1</Button>
<Button Margin="3" MaxWidth="200" MinWidth="100">Button 2</Button>
<Button Margin="3" MaxWidth="200" MinWidth="100">Button 3</Button>
<Button Margin="3" MaxWidth="200" MinWidth="100">Button 4</Button>
</StackPanel>
</Border> <Button Grid.Row="0" Grid.Column="0">Top Left</Button>
<Button Grid.Row="0" Grid.Column="1">Middle Left</Button>
<Button Grid.Row="1" Grid.Column="2">Bottom Right</Button>
<Button Grid.Row="1" Grid.Column="1">Bottom Middle</Button> </Grid>

这两个属性不指定时默认为0。

布局舍入

按比例设置尺寸时可能会出现边缘模糊的问题,将布局容器的UseLayoutRounding属性设置为true即可解决。

跨行和跨列

使用 RowSpanColumnSpan进行

跨列填充

<Button Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2">Middle Left</Button>

Canvas面板

它允许使用精确的坐标放置元素。

在Canvas中定位元素,需要设置Canvas.TopCanvas.Left附加属性。

可使用Width和Height属性明确设置子元素的尺寸。

WPF学习笔记02_布局的更多相关文章

  1. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  2. WPF 学习笔记-在WPF下创建托盘图标

    原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...

  3. WPF 学习笔记-设置属性使窗口不可改变大小

    原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...

  4. WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

    原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...

  5. Qt学习笔记-Widget布局管理

    Qt学习笔记4-Widget布局管理       以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...

  6. 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)

    (应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...

  7. WPF学习笔记系列之一 (布局详情)

    布局:StackPanel  栈布局:控件不会拐弯且多出的不再显示.DockPanel   停靠布局 吸在上边下边或左右.WrapPanel    环绕布局   一行控件会拐弯Canvas  进行基于 ...

  8. WPF学习笔记一之布局

    1.Canvas 布局控件Canvas主要用来画图,注意Canvas.Left/Right/Top/Bottom <Canvas Margin="10,10,10,10" B ...

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

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

随机推荐

  1. CSS初识- 选择器 &背景& 浮动& 盒子模型

    # CSS初识-目标: > 1. 学会使用CSS选择器 > 2. 熟记CSS样式和外观属性 > 3. 熟练掌握CSS各种基础选择器 > 4. 熟练掌握CSS各种复合选择器 &g ...

  2. 第 4 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现收藏夹功能 实现重设计的个人界面功能 无 ...

  3. js监测页面是否切换到后台

    最近做个弹幕,用的是第三方的插件,在浏览器页面切换到后台,返回后发现数据有堆叠卡死的情况,如何解决这个问题?网上参考了些demo,大致可以实现 1.document.hidden( Boolean值, ...

  4. 谈谈 javascript的 call 和 apply用法

    定义: ECMAScript规范为所有函数都包含两个方法(这两个方法非继承而来),call和apply,这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内 this 的值 ...

  5. VMware虚拟机下Centos8 设置静态IP地址

    缘起 我们在平时学习Redis.Nginx等分布式微服务的组件的时候,无法避免的需要用到Linux操作系统,而Linux操作系统的主机来源差不多就三种情况: 真实物理机 阿里云等云服务器 利用虚拟机 ...

  6. 传输层-Transport Layer(上):传输层的功能、三次握手与四次握手、最大-最小公平、AIMD加法递增乘法递减

    第六章 传输层-Transport Layer(上) 6.1传输层概述 在之前的几章内容中,我们自底向上的描述了计算机网络的各个层次,还描述了一些处于不同层次下的经典网络协议(如以太网.无线局域网.或 ...

  7. Python 学习笔记 之 03 - 函数总结

    函数总结    最基本的一种代码抽象的方式.    定义函数    使用def语句进行定义, return进行函数返回.    一旦执行导return,函数就执行完毕.    即使函数未指定retur ...

  8. hadoop_MapReduce_idea上打jar包,在虚拟机上运行

    打包前的介绍和准备工作 指定主类可以在运行jar包的时候不用输入要运行哪一个类,直接就可以运行了 指定主类 编辑jar 的信息 修改jar包的名称 build Complete!!! MapReduc ...

  9. Git中一个由readme.md文件引起的问题

    githup中建立远程仓库时,勾选了创建readme文件,本地仓库无法push,解决方法: https://blog.csdn.net/ashencode/article/details/816249 ...

  10. easyUI验证框赋值

    下面来看看easyui的各种验证框赋值的方式: <input name="userId" id="userId" class="easyui-n ...