WPF新手快速入门系列 1.布局
【概要】
该系列文章主要描述,新手如何快速上手做wpf开发。看过网上部分的教程,主要讲述的是介绍控件。这并没有问题,但是没有把自己的使用经验也完整的描述出来。
所以特此编写此系列文章希望能帮助到,因为一些工作原因或想入门的朋友们。如有学习过程中想交流学习、疑惑解答可以来此QQ群交流:580749909。
希望加群的人提问时尽量想清楚自己的问题,愿意钻研而不是等现成的答案而不去思考。祝各位同仁早日学会WPF这项技术。
【布局控件介绍】
Gird --
新手的话建议第一个必须掌握的布局控件就是grid,能熟练使用它能应付大部分布局需求。
1.理解gird并不难,它其实就是一个表格。把你想要的控件指定到某一行的某一列,如果不指定则是默认在第一行的第一列。
接下演示一下,如何创建行和列
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
以上代码创建了一个两行两列的grid,然后再看看如何把控件放置到布局中。
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Width="100" Height="25">1</Button>
<Button Grid.Column="1" Width="100" Height="25">2</Button>
<Button Grid.Row="1" Width="100" Height="25">3</Button>
<Button Grid.Row="1" Grid.Column="1" Width="100" Height="25">4</Button>
</Grid>

效果就是这样了。默认不指定的Row或者Column都是0也就是第一个。如果单单讲解这些就没有达到我写文章的效果了接下来讲解拿到需求之后如何分析布局。接下来拿QQ登陆来举例。

假设拿到这样需求之后,主要布局结构用数字标记分为三行。
第一行,用来放关闭、最小化按钮
第二行,用来放TIM图片,这时候有人会问了,那TIM这个背景图片明显是把第一行也占了。这个问题很好有一个属性可以解决叫跨行 Grid.RowSpan="2" 在图片上附加上这个属性就能达到效果了。
举一反三,跨列能应付跨列的需求。Grid.RowSpan="2"
第三行,这个行主要是放下头像、文本框、密码框、登陆按钮、复选框、文字等控件的。那这一行如何布局呢这么复杂。解决方案就是,在第三行里再嵌套一个Grid然后在设定行列等。
这一块留给大家自己分析考虑如果学会了做这个并不难。
StackPanel
继续QQ登陆的图接着讲,这个控件可以用来实现第3行的内容。比如实现那文本框、密码框的布局。

WrapPanel
这个控件呢,主要是让控件自动的在一行里,如果需要换行则规定好WrapPanel的布局控件的宽度,如果布局内容超出了这个宽度则会自动换行,应用于QQ登陆界面对应就是两个复选框。这样不需要指定任何属性他们就自动的站到你想要的位置上了。

Canvas
这个控件需要拿出来单独的讲一讲,它比较特殊。它属于“任意布局”的一种概念,就是你拖控件到UI上的时候你把它放在哪里它就在那里了。接下来我演示一下

Canvas.Left="235" Canvas.Top="182" 这两句主要描述了,button 在canvas控件中距离左侧235px,距离顶部182px。
RenderTransformOrigin 这个属性表示对象中心点 用来定义所有RenderTransform变换中相对位置的的参考点,默认为图形的左上即(0,0),该属性值为相对值,即x和y方向的(0-1)分别指以本图形所在矩形(在Expression blend中可以看到 )的长和宽为参照的百分比。
具体数值不需要关心,因为你拖到地方系统会自动根据你最后放置的点给你自动生成。
WPF新手快速入门系列 1.布局的更多相关文章
- WPF新手快速入门系列 2.绑定
[概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...
- WPF新手快速入门系列 3.MVVM
[概要] 这一章主要讲述,讲述MVVM模式和用法. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:580749909.(所有涉及到的源码都上传到了群文件里) 希望加群的人提问时尽量想清楚自己的 ...
- WPF快速入门系列(1)——WPF布局概览
一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...
- .Net5 WPF快速入门系列教程
一.概要 在工作中大家会遇到需要学习新的技术或者临时被抽调到新的项目当中进行开发.通常这样的情况比较紧急没有那么多的时间去看书学习.所以这里向wpf技术栈的开发者分享一套wpf教程,基于.net5框架 ...
- WPF快速入门系列(4)——深入解析WPF绑定
一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
- 快速入门系列--MVC--07与HTML5移动开发的结合
现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...
- vue 快速入门 系列 —— vue loader 上
其他章节请看: vue 快速入门 系列 vue loader 上 通过前面"webpack 系列"的学习,我们知道如何用 webpack 实现一个不成熟的脚手架,比如提供开发环境和 ...
- vue 快速入门 系列 —— vue-router
其他章节请看: vue 快速入门 系列 Vue Router Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌. 什么是路由 ...
随机推荐
- Linux 下使用 killall 命令终止进程的 8 大用法
Linux 的命令行提供很多命令来杀死进程.比如,你可以向 kill 命传递一个PID来杀死进程:pkill 命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死. 但是还有一个命令叫 ki ...
- java数组的拷贝和扩容
1.拷贝arraycopy方法 // 拷贝:arraycopy方法 // arraycopy // 第一个参数:原数组 // 第二个参数:原数组元素的起始位置 // 第三个参数:目标数组 // 第四个 ...
- python5.1文件的读取
fh1=open(r"C:\222.txt","r")#用open函数读取文件,“r”进行转义,fh1文件句柄data=fh1.read()#把读取的句柄赋值给 ...
- 新司机的致胜法宝,使用ApexSql Log2018快速恢复数据库被删除的数据
作为开发人员,误操作数据delete.update.insert是最正常不过的了,比如: 删除忘记加where条件: 查询为了图方便按了F5,但是数据里面夹杂着delete语句. 不管是打着后发动机声 ...
- MATLAB通过ODBC连接数据库方法
MATLAB通过ODBC连接数据库方法 1.首先创建数据库,我在这里用到的是MySQL 8.0 2.建立ODBC数据源,参考链接: https://www.cnblogs.com/benpao1314 ...
- CSS 学习第二天
超链接的样式: 1.颜色变化:未访问时的样式a:link:鼠标点击后的样式a:visited;鼠标放上去的样式a:hover;鼠标点击时的样式a:active 2.鼠标变小手:cursor:point ...
- C#LeetCode刷题之#657-机器人能否返回原点(Robot Return to Origin)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3959 访问. 在二维平面上,有一个机器人从原点 (0, 0) 开 ...
- Vue 离开页面时的校验-mixin-beforeRouteLeave
一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注 ...
- 关于Hexo,Next主题的‘下一页’、‘上一页’按钮错误显示为html代码 的解决方法
关于Next主题的'下一页'.'上一页'按钮错误显示为html代码的解决方法 我在建立自己的博客过程中遇到了页面'下一页'和'上一页'按钮显示为html代码<i class="fa f ...
- jquary常见问题总结
如何调用本地json 1. 调用 <script src="solution.json?cb=readData"></script> 2. json 修改 ...