在控件模板中,我想将相同的样式应用于所有文本块

本文关键字:样式 应用于 文本 控件 | 更新日期: 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"的处理方法是使用键创建样式。