2013-12-15 31 views
1

我已经习惯了以下改变我悬停在我的标签文本颜色。但默认的文字颜色是黑色的。我如何修改下面的默认颜色为其他颜色,例如白色。更改默认悬停在文本颜色wpf

<Page.Resources> 
    <SolidColorBrush x:Key="mouseOverColor" Color="Gold" /> 
    <Style x:Key="mouseOverStyle" TargetType="Label"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Foreground" Value="{StaticResource mouseOverColor}" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
        <ContentPresenter /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 

回答

5

根本不需要重写模板。这只能与以下样式来实现:

<SolidColorBrush x:Key="mouseOverColor" Color="Gold" /> 
<Style TargetType="Label" x:Key="mouseOverStyle"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Foreground" Value="{StaticResource mouseOverColor}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

您的触发器不会在工作的情况下你是在标签上规定的Foreground默认值。

不会为这个标签工作:

<Label Content="sjdfjfddjfjdfs" 
     Style="{StaticResource mouseOverStyle}" Foreground="Green"/> 

然而,将这个标签工作:

<Label Content="sjdfjfddjfjdfs" Style="{StaticResource mouseOverStyle}"/> 

即使你的风格工作,但要确保你不设置局部值前景DP。这是因为Dependency Property Precedence order其中本地值比样式的setter值拥有更高的优先级。

+0

但我有几个标签和一些我想有这种变化所以我做了以下的我想要的:

+0

'Foreground'有一种'Brush' – Chris

+0

@HarryBoy你应该仍然能够以你想要的方式使用这个答案你只需要添加'x:Key = '并使用它你现在正在做的事情。 – Chris

1

您是否试过在Setter中更改Foreground属性的Value

例如

<Setter Property="Foreground" Value="White" /> 

或定义您想要的颜色的Brush并使用它?例如

<SolidColorBrush x:Key="myColor" Color="White" /> 

<!-- Your Existing Code --> 
    <Setter Property="Foreground" Value="{StaticResource myColor}" /> 
<!-- Your Existing Code --> 

罗希特的答案是简单得多/更明智的,如果你只是在标签颜色的变化后(而不是做与ControlTemplate什么。