WPF 布局心得 一个像素引发的问题和思考

用xaml布局界面的时候,遇到了这样一个问题。
按钮的白色border边框一边细一边消失了。

按钮的白色border边框一边细一边消失了

正常的情况应该是这样的。

这里写图片描述

我大致的思路是这样的,可能是外部原因:容纳按钮的容器把按钮的边框挤没了。还有一种可能是内部原因:按钮的样式写的有问题,因为按钮的样式是自定义的,自定义的时候容易更改一些细节的地方,但自己察觉不出来。

试着更改了按钮外的容器,发现没有效果。于是把注意力转移到寻找内部原因上来。在ControlTemplate中找到了这一处。

这里写图片描述

ControlTemplate是这样写的:最外层是一个Grid,接下来是Border,接下来是Grid,Grid中有ContentPresonter。问题在于border中有一个margin =“1,1,2,1”,这个会让Border在Grid中平移一下。正常状况下,没有人会让Grid和Border之间有一个margin。从图中有几个问题,为什么水平方向的border变细了,竖直方向的border没有变化。

布局中有数字的尺寸的优先级是最高的,他也有一个尽可能适应布局要求的期望,所以哪有空间就往哪挤。我显示设置了按钮的宽度,没有显示设置按钮的高度,按钮的宽度一旦设定,Grid的宽度就会不变,Grid里的Border的宽度不会变,然后我改变margin的值margin =“1,1,1,1”,Grid和Border既要保证原来的宽度不变又要体现出来margin设置的变化(设置margin意味着border的宽高要变小)。既要我不变又要我变小,我只能减小我的小白边啦。于是,两边白边减小一个像素,border的宽减小两个像素。

这里写图片描述

这里我猜想,Grid的Width = "TemplateBinding"优先级高于Border的Width = “TemplateBinding”
ControlTemplate内部设置的优先级高于外部引用控件设置属性的优先级。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值