样式与属性继承

时间:2013-01-03 14:28:13

标签: wpf properties styles

我正在处理一个WPF应用程序,其中为大多数基本控件(文本框等)定义了元素类型样式。我现在有一个控件,一个控件,一个控件...基本上我没办法直接改变文本框属性,所以我在我的控件中设置属性(fontsize),希望这个属性传播给所有的孩子控制。不幸的是,元素类型的样式优先于我的控件属性。

有没有办法覆盖这些元素类型的样式?

2 个答案:

答案 0 :(得分:1)

如果我理解的话,您可以在FontSize中为TextBox设置Style(例如FontSize = 15)。您还有一个包含一些Textbox子项的控件。

当您设置Control FontSize=10时,TextBox子项具有FontSize 15,而您希望它为10。

这是你的问题吗?如果是,则会发生这种情况:

FontSize是一个依赖属性。因此,它的值可以由下面列出的许多不同的提供者(从Dependency Property Setting Precedence List msdn取得的简化列表)从较高优先级到较低优先级给出

  1. 物业系统强制。
  2. 动态动画或具有保留行为的动画。
  3. 当地价值。
  4. TemplatedParent模板属性。
  5. 隐含的风格。仅适用于Style属性。
  6. 样式触发器。
  7. 模板触发器。
  8. 样式制定者。
  9. 默认(主题)样式。在默认样式中,以下优先顺序适用:
  10. 继承。
  11. 依赖项属性元数据的默认值。
  12. 在您的特定情况下,将根据以下来源设置TextBox FontSize:

      来自Style(优先级8)的
    • FontSize=15
    • 来自Control FontSize的
    • FontSize=10(优先级10)

    FontSize的值将获胜,因为它具有更高的优先级。

    总之,您可以根据设置优先级列表,使用具有更高优先级的提供程序来覆盖Style给出的FontSize。

    我希望这会有所帮助

答案 1 :(得分:0)

如何设置元素特定属性?例如。对于TextBox,FontSize = 10,对于combobox,它是11吗?或者它是10,即所有元素的标准尺寸?如果是这样的话,为什么你在元素样式中设置相同的值呢?

如果它的元素不同,那么在设置控件特定字体大小时你会有什么期望?它应该覆盖元素特定的字体大小吗?如果是这样,为什么你首先设置元素特定的字体?你应该控制(或者说App)定义一个可以级联到可视化树中最小元素的字体大小(如果到处都是相同的结果?)。在这种情况下,我建议你摆脱元素特定的字体。