24、wpf之布局(二)

前言:前面一篇博客写了一些基本的布局控件,这一篇准备写些布局属性及开发中遇到的一些问题。

一、需求分析

界面分为两部分,左边是一个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,还有一些和位置有关的附属属性,这一一起使用有时候会达不到预期目标,这里要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值