更改超链接前景而不会丢失悬停颜色

时间:2009-08-10 02:25:24

标签: wpf hyperlink

我正在编写一个WPF应用程序,我希望我的一些超链接成为默认的蓝色,而其他的超链接则是绿色的。没问题 - 我可以设置Foreground

<TextBlock><Hyperlink Foreground="#0C0">Mark as done</Hyperlink></TextBlock>

麻烦的是,当我这样做时,悬停效果消失了。在普通的超链接中,当我将鼠标移到链接上时,它会变为红色,当我将鼠标移开时,它会变回蓝色。但是在分配了Foreground属性的Hyperlink中,它总是那种颜色 - 红色悬停被完全抑制。

如何在不丢失默认悬停行为和颜色的情况下更改超链接的颜色?

2 个答案:

答案 0 :(得分:35)

直接设置Foreground(正如您所做)不起作用,并且在Style中设置也不起作用,除非您从默认的超链接样式“派生”该样式(必须包含OnMouseOver触发器)。所以这有效:

<TextBlock>
    <Hyperlink>
        <Hyperlink.Style>
            <Style TargetType="Hyperlink"
                   BasedOn="{StaticResource {x:Type Hyperlink}}">
                <Setter Property="Foreground" Value="#0C0"/>
            </Style>
        </Hyperlink.Style>
        Mark as done
    </Hyperlink>
</TextBlock>

将该样式提取回Window资源并使用密钥引用它可能会产生更易读的XAML,但上面的代码可以完成这项工作。

答案 1 :(得分:0)

您应该像这样构建您的超链接

<TextBlock Width="Auto" HorizontalAlignment="Center">
    <Hyperlink Click="ForgotPassword_Clicked">
        <TextBlock Text="Forgot Password?"/>
    </Hyperlink>
</TextBlock>

然后这种样式应该适合您

<Style TargetType="{x:Type Hyperlink}">
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="Foreground" Value="Blue" />
        <Setter Property="TextBlock.TextDecorations" Value="{x:Null}" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="TextBlock.TextDecorations" Value="Underline" />
            </Trigger>
        </Style.Triggers>
    </Style>