WPF,看下这个控件模板
为了搞清楚BorderThickness属性,剪辑了一段简单的Button模板:
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Border.BorderThickness">
<Setter.Value>
<Thickness>5,5,5,5</Thickness>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
问题:代码中设置BorderThickness时,写的是Border.BorderThickness,为什么要这么写呢?和直接写BorderThickness有什么区别吗?
我看到某个控件的标准模板中,有一部分就是这么写的
[解决办法]
你可以重新修改Button的控件模板,你修改的控件模板删除Border看看与原来的button控件对比下有什么区别的
[解决办法]
Border代表边框了,BorderThickness代表边框的粗细,然而BorderThickness代表边框区域的尺寸,具体参考MSDN介绍了:http://msdn.microsoft.com/zh-cn/library/cc917851(v=VS.95).aspx 和 http://msdn.microsoft.com/zh-cn/library/system.windows.controls.border.borderthickness(v=VS.95).aspx
[解决办法]
你把 <Thickness>5,5,5,5</Thickness>改成 <Thickness>5,10,5,10</Thickness>看看有没有变化。
[解决办法]
你把 <Thickness>5,5,5,5</Thickness>改成 <Thickness>5,10,5,10</Thickness>看看有没有变化。
有变化啊,上、下边框变粗了。为什么要写成Border.BorderThickness,不写成BorderThickness呢?
这就是了,5,10,5,10,这样写,可以分别控制边框的左、上、右、下的边框宽度。如果写成BorderThickness,则每条边框的宽度都是一样,没法分别控制。
------解决方案--------------------
直接写BorderThickness是控制自身的属性,也就是Button的,而写其它类型的BorderThickness则是控制对应类型的扩展属性,扩展属性的实现其实是一个静态方法,是父级元素开放给子级的一个快速设置方法,例如Grid.Row="1",用来设置子元素在父元素Grid中处于第几行,但这个Row属性是属于Grid的,不是子元素的。由于WPF的很多属性都带有继承性,你设置了父级元素的扩展属性,往往可以连带自身的属性一起受到影响,当然,对于Grid.Row,由于自身是不含Row属性,只有父级的Grid才有,因此不会影响到自身。
[解决办法]
Border.BorderThickness是Dependency Property的写法,按照楼主的模板,只有当Button出现在一个Border控件内部的时候,模板中定义的BorderThickness才会发挥作用。