2013-01-03 128 views
1

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

有什么方法可以重写这些元素类型的样式吗?

回答

1

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

当您设置Control FontSize=10,则文本框孩子们字号15,而你希望它是10

这是你的问题?如果是,则发生以下情况:

FontSize是一种依赖属性。作为这样的,它的值可以通过从较高列出许多不同的供应商(从Dependency Property Setting Precedence List msdn采取简化列表)中的以下

  1. 房产系统强制给予较低的优先级。
  2. 活动动画或具有保持行为的动画。
  3. 当地价值。
  4. TemplatedParent模板属性。
  5. 隐式样式。仅适用于Style属性。
  6. 样式触发器。
  7. 模板触发器。
  8. 风格二传手。
  9. 默认(主题)风格。在默认样式中,以下优先顺序适用:
  10. 继承。
  11. 来自依赖项属性元数据的默认值。

在特定情况下,该文本框字号将根据以下来源进行设置:

  • FontSize=15从样式(优先级8)
  • FontSize=10从控制字号(优先级为10)

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

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

我希望这有助于

+0

yes,那就更好了。就是这样。 – kodu

+0

尼斯答案克劳斯。我的+1。 –

+0

感谢您的回复,有趣的信息! – kodu

0

如何设置元素特定属性?例如。对于TextBox是FontSize = 10,对于组合框11是?还是10个,即所有元素的标准大小?如果是这样的话,为什么你在元素样式中设置相同的值?

如果它的元素不同,那么当你设置一个控件特定的字体大小时你期望什么?它应否覆盖元素特定的字体大小?如果是的话,为什么你首先设置了元素特定的字体?应该让你的控件(或应用程序)定义一个字体大小,使其可以级联到视觉树中最小的元素(如果相同的位置在任何地方都是如此)。在这种情况下,我会建议你摆脱元素特定的字体大小。

+0

我想也许你是正确的删除元素特定的字体大小。问题是这可能会有一些影响。如果“属性级联”优先于元素类型 – kodu