首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

WPF,看下这个控件模板解决方法

2013-08-04 
WPF,看下这个控件模板为了搞清楚BorderThickness属性,剪辑了一段简单的Button模板:Window.ResourcesSty

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控件对比下有什么区别的
[解决办法]

引用:
Quote: 引用:

你可以重新修改Button的控件模板,你修改的控件模板删除Border看看与原来的button控件对比下有什么区别的

没有区别啊,就是边框宽度,我就是不明白,为什么要写成Border.BorderThickness,就算是写成
TextBox.BorderThickness也照样运行

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>看看有没有变化。
[解决办法]
引用:
Quote: 引用:

你把 <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才会发挥作用。

热点排行