日期:2014-05-17  浏览次数:20847 次

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: 引用:

不太懂楼上说的