使用触发器在鼠标悬停时设置文本块前景色

19

我正在尝试设置块,使其前景色在鼠标指针悬停在上面时更改,以下是我的代码:

<TextBlock Foreground="blue" Margin="18,234,5,-2" Grid.RowSpan="3">
    <Underline>Remove Message</Underline>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property ="IsMouseOver" Value="True">
                    <Setter Property= "Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

当我尝试将setter属性更改为其他任何值,例如FontSize="30"时,事件确实会发生。

1个回答

52

这是因为控件上设置的属性会覆盖样式中定义的属性,所以你的Foreground="blue"将覆盖你在样式中设置的任何内容。要解决这个问题,可以将Foreground="blue"移动到样式中,并从控件的属性中删除它。

<TextBlock Margin="18,234,5,-2" Grid.RowSpan="3">
      <Underline>Remove Message</Underline>
      <TextBlock.Style>
           <Style TargetType="TextBlock">
               <Setter Property= "Foreground" Value="Blue"/>
               <Style.Triggers>
                   <Trigger Property ="IsMouseOver" Value="True">
                        <Setter Property= "Foreground" Value="Red"/>
                   </Trigger>
               </Style.Triggers>
            </Style>
       </TextBlock.Style>
</TextBlock>

你会如何在 Focus 或 Pressed 上实现这个功能?或者这些功能可能在 TextBlocks 上实现吗? - ClosDesign
对于 TextBlock 而言,它被聚焦或按下并没有太多意义。对于其他 UI 元素,例如 Button,被聚焦或按下是有意义的,对于按下,您可以使用 IsPressed 属性(而不是 IsMouseOver)。对于聚焦,有其他方法(请参见 FocusVisualStyle)。 - Andrei Pana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接