当前位置:网站首页>24、wpf之布局(二)
24、wpf之布局(二)
2022-08-02 15:05:00 【komla168】
前言:前面一篇博客写了一些基本的布局控件,这一篇准备写些布局属性及开发中遇到的一些问题。
一、需求分析
界面分为两部分,左边是一个ListBox选择控件,右边是一个ContentPresenter类型容器,通过ListBox选项我实现ContentPresenter内容转换,这个ContentPresenter用来承载自定义的UserControl。
最外层笔者之前使用的是StackPanel作为容器,里面有ListBox和Grid,但是在最大化的时候发现这个承载UserControl的在水平方向上面不能自动填充满Grid控件。
二、原因分析
最开始笔者以为是UserControl的问题,于是设置UserControl的Size,但是不管用,然后对主界面的Grid进行调整,也无济于事,苦恼了好久,然后看一些开源的控件并不断的调整测试,最后发现去掉最外层的StackPanel换成Grid就可以了,所以才有了上一篇的对布局控件的总结。
三、经验
布局关注整体,着眼局部。整体怎么设计,局部又应该如何适应窗体的扩大缩小。
笔者在对钉钉、微信、网易云等桌面系统的研究后发现,最里层的控件比如Textbox、label、Button等,尺寸不会随着窗体的最大化而改变。
但是为了让上文中说的ContentPresenter类型容器能跟随窗体最大化变化,就不能设置设个UserControl的尺寸,不然设置列绝对尺寸后当窗体最大化时尺寸也不会变化。
下面以HandyCOntrol中的一个UserControl为例说明下。
1、2级控件都没有设置尺寸,3级控件设置了最大宽度,4级控件设置了子控件的宽高,笔者这里看了下大厂开发的桌面应用,基本上用于显示的最底层控件尺寸是固定的,变大变小底层控件的尺寸是不变的,变化的是包含他们的父控件在变化。
此外,需要注意的是,对于有些元素在特定环境下来讲,设置HorizontalAlignment/VerticalAlignment是无效的。
比如StackPanel中放置的元素,如果StackPanel的Orientation=Horizontal,那么StackPanel中元素的水平位置都是从左向右排列,无法通过设置HorizontalAlignment来调整StackPanel内部元素的水平位置。同样,当StackPanel的Orientation=Vertical,那么StackPanel中元素的竖直位置都是从上到下排列,无法通过设置VerticalAlignment来调整StackPanel内部元素的竖向位置。
这里说下有关尺寸的相关属性,控件基本都有上下Height和Width,这个Height和Width的值可以是具体的值(绝对尺寸,不推荐),也可以是Auto(根据控件内容自动调整控件的Height和Width,推荐),或是"*"(去除绝对尺寸和Auto之后的部分按比例再分)。再有就是能设置控件尺寸的属性不只Height和Width,还有一些和位置有关的附属属性,这一一起使用有时候会达不到预期目标,这里要注意。
边栏推荐
猜你喜欢
已经2022下半年了,居然还在说链动2+1!
最强分布式锁工具:Redisson
系统存储的基本管理--挂载,分区,用户配额
祝蔡徐坤生日快乐!
语音直播系统——做好敏感词汇屏蔽打造绿色社交环境
太帅了!我用炫酷大屏展示爬虫数据!
QT基础第四天(4)qt事件机制:事件基础概念,常见事件机制,事件处理以及事件的重写
UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 178: illegal multibyte s
【学习笔记之菜Dog学C】自定义类型详解(结构体+枚举+联合)
阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你
随机推荐
mysql 自动添加创建时间、更新时间
Sql文件导入数据库-保姆级教程
IDO预售DAPP系统开发(NFT挖矿)
Qt | 信号和槽的一些总结
QT | VS2017 + Qt5.14.2 环境搭建
语音直播系统——做好敏感词汇屏蔽打造绿色社交环境
【 Leetcode string, the string transform/hexadecimal conversion 】 HJ1. The length of the string last word HJ2. Calculation of a certain number of characters appear HJ30. String merging processing
系统存储的基本管理--挂载,分区,用户配额
Qt | QWidget 的一些总结
性能测试详解(理论篇)
Qt | Qt 的项目文件.pro 文件详解
ShardingSphere基本介绍及核心概念
"No title"
Vest bag access process record
多线程------实际篇
Go-5-简单介绍fmt库
并发模型和I/O模型介绍
Qt | 鼠标事件和滚轮事件 QMouseEvent、QWheelEvent
Brute-force cracking of the latest JVM interview questions of Meituan: unlimited execution
Qt | 关于对象树和元对象的相关问题