wpfxaml

Using a trigger to set a TextBlock foreground on MouseOver


I am trying to set block so its foreground color will change every time the mouse cursor goes over it, and this is my code:

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

When I try to change the setter property to any other, for example FontSize="30", the event does occur.


Solution

  • That is because the properties set on a control override the one defined in the Style, so your Foreground="blue" will override whatever you set in the style. To fix this, you can move the Foreground="blue" in the style and remove it from the properties of the control.

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