当前位置:网站首页>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,还有一些和位置有关的附属属性,这一一起使用有时候会达不到预期目标,这里要注意。
边栏推荐
猜你喜欢
随机推荐
美团面试:如何设计一个注册中心?
Qt | 关于容器类的一些总结
MySQL 行级锁(行锁、临键锁、间隙锁)
MySQL-3-密码破解
Go-4-在vim中无法跳转到源代码
Eight big software attack overview of supply chain
类的比较大小(Comparable -> compareTo(类自己实现接口),Comparator -> compare(新建一个类作为比较器))
MySQL 高级(进阶) SQL 语句 (一)
SOA(面向服务架构)是什么?
PAT Class A 1145 Hash - Average Lookup Time
矢量图的作用与工具
QT | VS2017 + Qt5.14.2 环境搭建
Basic management of system storage -- mounts, partitions, user quotas
绝对最直白的MySQL MVCC机制总结,免费拿走
入门关于 switch case 的理解
MySQL 视图(详解)
MySQL-1-环境部署
PAT Grade A 1143 Lowest Common Ancestor
面试了个阿里P7大佬,他让我见识到什么才是“精通高并发与调优”
管理软件开发 管理软件定制开发流程