关闭

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

标签: wpf布局界面xaml
246人阅读 评论(0) 收藏 举报
分类:

用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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6134次
    • 积分:259
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论