2016-12-28 50 views
0

我已经定义了一个风格,我希望所有我的TextBlocks到inerit我的应用程序的资源范围内:如何停止ToolTips继承我的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风格呢?

+0

在'TextBlock'上设置一个全局默认样式是一个可怕的想法,这就是原因。只在需要的地方设置默认的“TextBlock”样式,而不是普遍。考虑为样式文本实例使用'Label'而不是'TextBlock'。您可以设置填充/边距等,使其看起来完全符合您的需要。 –

回答

1

TextBlock上设置全局隐式样式是一个可怕的想法,这就是原因。 TextBlock是显示文本的原语。只在需要的地方设置隐含的TextBlock样式要好得多,而不是普遍。

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

但是,如果你想快速,肮脏和简单的方法来解决一个不好的决定,你可以使用祖父用于在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>