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的样式
------解决方案--------------------
就是说属性的值的确定其实有个计算过程或者顺序:
系统是按照下面的优先级来计算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
------解决方案--------------------