如何阻止工具提示继承我的 TextBlock 样式?

How can I stop ToolTips from inheriting my TextBlock style?

我在我的应用程序资源中定义了一种样式,我希望我的所有文本块都初始化:

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect BlurRadius="1" ShadowDepth="0" />
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontFamily" Value="Arial" />
    <Setter Property="FontWeight" Value="Bold" />
</Style>

我不想仔细检查并明确规定每个文本块的样式 - 我只希望它们都能自然地继承这种样式。

不幸的是,当我定义工具提示时,该工具提示也采用了这种样式。我猜这是因为它在设计中的某处包含了 TextBlock

我可以接受的是必须遍历并设置每个定义的工具提示的样式(因为它们在我的应用程序中使用得较少),所以如果有某种方法可以定义工具提示样式来覆盖继承的文本块样式,我没意见。

那么,如何才能阻止我的工具提示继承 TextBlock 样式?

TextBlock 上设置全局隐式样式是个糟糕的主意,这就是原因。 TextBlock 是显示文本的图元。最好只在需要的地方设置隐式 TextBlock 样式,而不是普遍设置。

或者考虑使用 Label 而不是 TextBlock 作为样式文本实例,并使用隐含的 Label 样式。这就是 Label 存在的原因之一。您可以设置 padding/margin 等样式,使其看起来完全符合您的要求。

但是,如果您想要快速、肮脏和简单的方法来解决错误的决定,您可以使用隐式样式本地化样式内的技巧,爷爷曾在 El Alamein 使隆美尔将军感到困惑:

<Style TargetType="ToolTip">
    <Style.Resources>
        <!-- Implicit style for TextBlocks within ToolTips -->
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="FontWeight" Value="Regular" />
            <Setter Property="Effect" Value="{x:Null}" />
        </Style>
    </Style.Resources>

    <Setter Property="Foreground" Value="Black" />
    <Setter Property="FontWeight" Value="Regular" />
    <Setter Property="Effect" Value="{x:Null}" />
</Style>