布局原则

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. WordCounter项目(基于javase)

    1.  Github项目地址: https://github.com/Flyingwater101/WordCount 1.  PSP表格 PSP2.1 Personal Software Proce ...

  2. js之数组乱序

    这是最近面试遇到的,不过忘记了,之前也有印象刷到过这道题,就再次记录一下加深印象吧,听到最多的答案是利用sort方法,不过也有说这种方法不好,利用了快排和插入排序,那就整理下吧 <!DOCTYP ...

  3. REHの收藏列表

    搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...

  4. Robot Framework+adb框架自动化测试Android设备案例⑸——L1层测试用例

    一.L1层测试用例 1.初始化.robot *** Settings *** Resource ../L2层关键字.robot *** Test Cases *** 切换EMMC模式 [Tags] A ...

  5. PluginOK中间件高级版-支持在Chrome、Edge、Firefox等浏览器网页中真正内嵌ActiveX等控件运行的版本已获多家上市公司采购

    PluginOK(牛插)中间件(原名:本网通WebRunLocal)是一个实现WEB浏览器(Web Browser)与本地程序(Local Application)之间进行双向调用的低成本.强兼容.安 ...

  6. (转) SQL 中的 NULL 你真的懂了吗?【数据库|SQL】

    注:转载自下面链接 https://blog.csdn.net/lnotime/article/details/104847946 SQL 中的 NULL (译自 NULL Values in SQL ...

  7. redis位操作

    setbit 设置指定key的偏移量处的值 key:键值 offset:二进制数据的偏移量(注意从左开始为第0位) value:要设置的值(0或1) getbit 获取对应key的offset处的值 ...

  8. js上 九.多分支语句

    9-3.if...else if ...else语句 多分支的if语句,多选一. 格式:

  9. DRF比Django的认证和权限高在哪里

    Django可以用LoginRequiredMixin和PermissionRequiredMixin给类视图添加认证和权限,DRF做了高级封装,提供了更简洁的实现方式.我们通过继续学习官网教程来进行 ...

  10. TP学习第二天—

    一.控制器和对应方法的创建 2.路由解析 传统的路由解析方法: 具体url地址模式设置(配置文件在 ThinkPHP/Conf/convertion.php) 停到了之前的 黑马传智的 TP课,换了个 ...