如何阻止ToolTips继承我的TextBlock样式?

时间:2016-12-28 21:18:35

标签: c# wpf xaml tooltip textblock

我已经在我的应用程序资源中定义了一个样式,我希望我的所有文本块都不合格:

<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样式?

1 个答案:

答案 0 :(得分:1)

TextBlock上设置全局隐式样式是一个糟糕的主意,这就是原因。 TextBlock是显示文本的基元。只有在需要时才设置隐式TextBlock样式,而不是普遍适用。

或者考虑使用Label而不是TextBlock作为样式化文本实例,并且具有隐式Label样式。这是Label存在的一个原因。您可以设置填充/边距等样式,使其看起来完全符合您的要求。

但是如果你想要快速,肮脏和简单的方法来解决一个错误的决定,你可以使用祖父用来在El Alamein中使用flummox General Rommel的隐式风格本地化的技巧:

<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>