我正在编写一个WPF应用程序,我希望我的一些超链接成为默认的蓝色,而其他的超链接则是绿色的。没问题 - 我可以设置Foreground
:
<TextBlock><Hyperlink Foreground="#0C0">Mark as done</Hyperlink></TextBlock>
麻烦的是,当我这样做时,悬停效果消失了。在普通的超链接中,当我将鼠标移到链接上时,它会变为红色,当我将鼠标移开时,它会变回蓝色。但是在分配了Foreground属性的Hyperlink中,它总是那种颜色 - 红色悬停被完全抑制。
如何在不丢失默认悬停行为和颜色的情况下更改超链接的颜色?
答案 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>