【发布时间】:2012-12-17 22:18:37
【问题描述】:
我正在处理一个 WPF 应用程序,其中为大多数基本控件(文本框等)定义了元素类型的样式。我现在有一个控件,在一个控件中,在一个控件中......基本上我没有办法直接改变文本框属性,所以我在我的控件中设置了属性(字体大小),希望这个属性会传播给所有的孩子的控制。不幸的是,元素类型的样式优先于我的控件属性。
有没有办法覆盖这些元素类型的样式?
【问题讨论】:
标签: wpf properties styles
我正在处理一个 WPF 应用程序,其中为大多数基本控件(文本框等)定义了元素类型的样式。我现在有一个控件,在一个控件中,在一个控件中......基本上我没有办法直接改变文本框属性,所以我在我的控件中设置了属性(字体大小),希望这个属性会传播给所有的孩子的控制。不幸的是,元素类型的样式优先于我的控件属性。
有没有办法覆盖这些元素类型的样式?
【问题讨论】:
标签: wpf properties styles
如果我理解得很好,您将FontSize 设置为TextBox 在Style 中(例如FontSize=15)。您还有一个包含一些 Textbox 子项的控件。
当您设置Control FontSize=10 时,TextBox 子项的 FontSize 为 15,而您期望它为 10。
这是你的问题吗?如果是,会发生这种情况:
FontSize 是一个依赖属性。因此,它的值可以由许多不同的提供者给出,这些提供者在下面列出(从Dependency Property Setting Precedence List msdn 获取的简化列表)从高到低优先级
在您的具体情况下,TextBox FontSize 将根据以下来源设置:
FontSize=15 来自 Style(优先级 8)FontSize=10 来自 Control FontSize(优先级 10)FontSize 的值将获胜,因为它具有更高的优先级。
总之,您可以根据设置的优先级列表,使用具有更高优先级的提供程序来覆盖 Style 给定的 FontSize。
希望对你有帮助
【讨论】:
如何设置元素的特定属性?例如。对于 TextBox 是 FontSize = 10,对于组合框是 11?还是 10,即所有元素的标准尺寸?如果是这样,为什么要在元素样式之间设置相同的值?
如果元素之间的不同,那么当您设置控件特定的字体大小时,您期望什么?它应该覆盖元素特定的字体大小吗?如果是这样,为什么您首先设置元素特定的字体?您的控件(或应用程序更确切地说)是否应该定义一个字体大小,该字体大小将级联到可视树中的最小元素(如果到处都需要相同的字体?)。在这种情况下,我建议您摆脱元素特定的字体大小。
【讨论】: