读书人

WPF关于控件模板的属性绑定解决办法

发布时间: 2013-07-11 15:38:46 作者: rapoo

WPF,关于控件模板的属性绑定
此例子来自MSDN:
在文中,有这么一段使用模板的代码:
<StackPanel>
<Button Style="{StaticResource newTemplate}"
Background="Navy" Foreground="White" FontSize="14"
Content="Button1"/>

<Button Style="{StaticResource newTemplate}"
Background="Purple" Foreground="White" FontSize="14"
Content="Button2" HorizontalContentAlignment="Left"/>
</StackPanel>


说了这么一句话:即使 Foreground 和 FontSize 属性不是通过模板绑定的,设置它们也有作用,因为它们的值是通过继承而来的。


请问:Foreground、FontSize到底是谁继承谁的?是Button继承StackPanel的吗?


[解决办法]
Foreground 和 FontSize 属性本来就是Button的属性,什么继承StackPanel!

StackPanel这个只是一个容器而已!
[解决办法]
你们两个说的继承不是同一个概念。

1楼说的是面向对象编程里的继承。下结论太着急。
楼主说的是视觉树中的属性值继承。
[解决办法]
Foreground、FontSize 就像是css里面的行间样式
Style="{StaticResource newTemplate}" 样式继承了 newTemplate模板的样式
所以 当然 行间样式优先于 继承的 style样式咯,
所以说 设置它也有作用!如果冲突,甚至可以覆盖Style的样式
[解决办法]

引用:
不太懂楼上说的
MSDN说的是,设置Foreground、FontSize属性也有作用,因为它们的值是通过继承而来的。
我想知道,谁继承谁的Foreground、FontSize属性值

就是说属性的值的确定其实有个计算过程或者顺序:
系统是按照下面的优先级来计算Dependency属性的值的:
1、Local Value (你说的直接设置)
2、Style. Triggers
3、Template Triggers
4、Style. Setters
5、Theme Style. Triggers
6、Theme Style. Setters
7、Property Value Inheritance (你提到的继承)
8、Default Value

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

不太懂楼上说的


MSDN说的是,设置Foreground、FontSize属性也有作用,因为它们的值是通过继承而来的。
我想知道,谁继承谁的Foreground、FontSize属性值


就是说属性的值的确定其实有个计算过程或者顺序:
系统是按照下面的优先级来计算Dependency属性的值的:
1、Local Value (你说的直接设置)
2、Style. Triggers
3、Template Triggers
4、Style. Setters
5、Theme Style. Triggers
6、Theme Style. Setters
7、Property Value Inheritance (你提到的继承)
8、Default Value

请问下,这里的Foreground、FontSize属性值,是谁继承了谁的(MSDN说的这两个属性值继承得来的)

这个根据视觉树来,应该是StackPanel的。当然这里的StackPanel没有设置,所以StackPanel可能继承了其上一层的可视化元素的属性值,依次往上找,如果都没有设定,就采用默认的。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

不太懂楼上说的
MSDN说的是,设置Foreground、FontSize属性也有作用,因为它们的值是通过继承而来的。
我想知道,谁继承谁的Foreground、FontSize属性值

就是说属性的值的确定其实有个计算过程或者顺序:
系统是按照下面的优先级来计算Dependency属性的值的:
1、Local Value (你说的直接设置)
2、Style. Triggers
3、Template Triggers
4、Style. Setters
5、Theme Style. Triggers
6、Theme Style. Setters
7、Property Value Inheritance (你提到的继承)
8、Default Value

请问下,这里的Foreground、FontSize属性值,是谁继承了谁的(MSDN说的这两个属性值继承得来的)

这个根据视觉树来,应该是StackPanel的。当然这里的StackPanel没有设置,所以StackPanel可能继承了其上一层的可视化元素的属性值,依次往上找,如果都没有设定,就采用默认的。

可是,上一层并没有设定啊。
更何况的是,能够通过设置Button的Foreground属性,以使前景色变化,这就说明不是继承的吧..不能理解

你好好看看回复吧,系统计算依赖属性的优先级。
如果button的上层visual element有设置的话,它就继承过来了。如果都没有设置,它就使用默认值。你直接在button里面设置就是优先级最高的local value,这个会覆盖掉其他所有情况的设置。

读书人网 >C#

热点推荐