在控件模板中,我想将相同的样式应用于所有文本块
本文关键字:样式 应用于 文本 控件 | 更新日期: 2023-09-27 18:31:26
我有一个类库,在其中我为 TextBlock 创建了默认样式,该样式应用于使用此类库的任何应用程序中的每个 TextBlock。
问题是我有时需要在其他一些控件(例如功能区或我自己的自定义控件)中排除 TextBlocks。文本块不可访问,例如选项卡项标题中的文本块。
有没有办法强制 wpf 对一个控件中的所有文本块使用另一种样式?
谢谢
只需将空(或任何其他)样式添加到嵌套在引用资源字典(其中定义了全局样式)的控件内的任何TextBlock
祖先的资源字典中。例如,在这种情况下,不会应用为 TextBlock
定义的全局样式(如果资源字典由 Button
控件的祖先引用):
<Button>
<Button.Resources>
<Style TargetType="TextBlock"/>
</Button.Resources>
<TextBlock Text="FooBar"/>
<Button>
好的。事实证明,这是不可能的,请参阅迈克·史特博的答案,了解原因及其背后的合理性。
解决方法是不为 TextBlock
创建隐式样式,因为它会影响其他ControlTemplate
中的TextBlock
。
对我有用的是从TextBlock
派生一个类,比如说Label
并将我的风格应用于它,然后在我想要具有该特定风格的TextBlock
的任何地方使用它。
一种更"Wpf Natural"的处理方法是使用键创建样式。