WPF学习笔记02_布局
布局原则
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中功能最强大的布局容器。
创建步骤
选择希望使用的行和列的数量。
为每个包含的元素指定恰当的行和列。
创建两行三列
<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即可解决。
跨行和跨列
使用 RowSpan和ColumnSpan进行
跨列填充
<Button Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2">Middle Left</Button>
Canvas面板
它允许使用精确的坐标放置元素。
在Canvas中定位元素,需要设置Canvas.Top和Canvas.Left附加属性。
可使用Width和Height属性明确设置子元素的尺寸。
WPF学习笔记02_布局的更多相关文章
- WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...
- WPF 学习笔记-在WPF下创建托盘图标
原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...
- WPF 学习笔记-设置属性使窗口不可改变大小
原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...
- WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决
原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...
- Qt学习笔记-Widget布局管理
Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...
- 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)
(应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...
- WPF学习笔记系列之一 (布局详情)
布局:StackPanel 栈布局:控件不会拐弯且多出的不再显示.DockPanel 停靠布局 吸在上边下边或左右.WrapPanel 环绕布局 一行控件会拐弯Canvas 进行基于 ...
- WPF学习笔记一之布局
1.Canvas 布局控件Canvas主要用来画图,注意Canvas.Left/Right/Top/Bottom <Canvas Margin="10,10,10,10" B ...
- WPF学习笔记3——Layout之1
一.概述 了解XAML的基本之后,进入Layout的学习.Layout,即布局,可能需要用到几种不同的容器.每一种容器都有各自的逻辑.在用户界面的设计过程中,很多时候是在想办法使得界面更加吸引.实在. ...
随机推荐
- Codeforces Edu Round 60 A-E
A. Best Subsegment 显然,选择数列中的最大值当做区间(长度为\(1\)).只要尝试最大值这个区间是否能扩展(左右两边值是否跟它一样就行了) #include <cstdio&g ...
- 题解-JSOI2011 分特产
题面 JSOI2011 分特产 有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数. 数据范围:\(1\le n, ...
- DVWA各等级sql注入
sql全等级注入 level:low <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { //判断submit是否存在 // Get input $id = ...
- druid数据源yml配置
application.yml配置 spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:33 ...
- Greenplum 性能优化之路 --(一)分区表
一.什么是分区表 分区表就是将一个大表在物理上分割成若干小表,并且整个过程对用户是透明的,也就是用户的所有操作仍然是作用在大表上,不需要关心数据实际上落在哪张小表里面.Greenplum 中分区表的原 ...
- ubuntu 设置apple主题
ubuntu 设置apple主题 参考地址,主要是看这个,很详细 https://linuxhint.com/gnome-tweak-tool-ubuntu-17-10/ 效果图 终端命令 $ sud ...
- 云原生时代,Java的危与机(周志明)
说明 本篇文章是转载自周志明老师的文章,链接地址:https://www.infoq.cn/article/RQfWw2R2ZpYQiOlc1WBE 今天,25 岁的 Java 仍然是最具有统治力的编 ...
- 手把手教你使用Python轻松搞定发邮件
前言 现在生活节奏加快,人们之间交流方式也有了天差地别,为了更加便捷的交流沟通,电子邮件产生了,众所周知,电子邮件其实就是客户端和服务器端发送接受数据一样,他有一个发信和一个收信的功能,电子邮件的通信 ...
- Mysql 中的MDL
本文可以结合 MySQL中的事务原理和锁机制 查看. 首先简单了解一下 mysql 的 sql 类型: 1.数据定义语言 DDL:Create.Drop.Alter 操作.用于定义库和表结构的. 2. ...
- vSphere Esxi 6.x 常用序列号
以下资料转载于互联网公开资料,不得用于商业用途,仅做学习交流. vSphere 6 Enterprise Plus1F6XH-8VJ9L-481Y9-L835P-CFHHA1G28U-AW18P-08 ...