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

Joe*_*ite 20 wpf hyperlink

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

<TextBlock><Hyperlink Foreground="#0C0">Mark as done</Hyperlink></TextBlock>
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*ton 36

直接设置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>
Run Code Online (Sandbox Code Playgroud)

将该样式提取回Window资源并使用键引用它可能会使更易读的XAML,但上面的代码完成了这项工作.

  • 大声笑我刚刚在谷歌找到了这个答案,试图解决同样的问题.如果可以的话,我会投票给自己!:) (14认同)