样式与属性继承



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

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

如果我理解得好,您将FontSize设置为Style中的TextBox(例如FontSize=15)。您还有一个包含一些文本框子框的控件。

当您设置Control FontSize=10时,则TextBox子框的FontSize为15,而您期望它为10。

这是你的问题吗?

FontSize是一个依赖属性。因此,它的值可以由以下

中列出的从高到低优先级的许多不同的提供者给出(从依赖属性设置优先级列表msdn中获得的简化列表)
  1. 属性强制。
  2. 活动动画,或具有保持行为的动画。
  3. 本地值。
  4. TemplatedParent模板属性。
  5. 隐式风格。仅应用于Style属性。
  6. 风格触发器。
  7. 模板触发器。
  8. 风格setter。
  9. 默认(主题)样式。在默认样式中,适用以下优先顺序:
  10. 继承。
  11. 依赖属性元数据的默认值。

在您的具体情况下,文本框的字体大小将根据以下来源设置:

  • FontSize=15 from Style (priority 8)
  • FontSize=10 from Control FontSize (priority 10)

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

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

希望对大家有所帮助

如何设置元素的特定属性?例如,对于TextBox是FontSize = 10和组合框是11?还是10,即所有元素的标准尺寸?如果是这样,为什么要在元素样式之间设置相同的值呢?

如果元素之间的字体大小不同,那么当你设置控件特定的字体大小时,你会期望什么呢?它是否应该覆盖元素特定的字体大小?如果是这样,为什么要首先设置元素的特定字体?你的控件(或应用程序)是否应该定义一个字体大小,将级联到视觉树中最小的元素(如果相同的点期望无处不在?)在这种情况下,我建议您去掉元素特定的字体大小。

相关内容

  • 没有找到相关文章

最新更新