用xaml布局界面的时候,遇到了这样一个问题。
按钮的白色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内部设置的优先级高于外部引用控件设置属性的优先级。