鉴于以下XAML标记,当我将鼠标悬停在它上面时,我希望超链接中的文本变成橙色,因为我在其父控件上设置了前景色,它应该按Property Value Inheritance过滤掉。但它仍然是黑色的。我需要做什么?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="DemoLink" TargetType="{x:Type Hyperlink}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="DarkOrange" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Label>
<Hyperlink Style="{StaticResource DemoLink}">
<Label Content="Text that should change colour on mouse over" />
</Hyperlink>
</Label>
</Grid>
</Window>
<小时/> 更新: Meleak的简单答案是使用TextBlock而不是内部Label会导致样式按预期工作 - TextBlock从其父级中选取前景色,而Label则不会。 p>
e.g。
<Label>
<Hyperlink Style="{StaticResource DemoLink}">
<TextBlock Text="Text that does change colour on mouse over" />
</Hyperlink>
</Label>
答案 0 :(得分:2)
Label
似乎不受其父级{i}}设置的影响。即使这没有效果
Foreground
<强>更新强>
为<Label>
<Hyperlink Style="{StaticResource DemoLink}" Foreground="DarkOrange">
<Label Content="This is some text that should change colour on mouse over" />
</Hyperlink>
</Label>
而不是Label
设置样式,它将起作用
Hyperlink
再次更新
简单的方法是使用<Window.Resources>
<Style x:Key="DemoLinkLabel" TargetType="Label">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="DarkOrange" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Label>
<Hyperlink Name="DemoHyperlink" >
<Label Content="This is some text that should change colour on mouse over"
Style="{StaticResource DemoLinkLabel}"/>
</Hyperlink>
</Label>
</Grid>
代替TextBlock
,因为它没有此问题
Label
答案 1 :(得分:1)
@Fredrik上面已经详细解释了。所以这可以是一个简单的样式和超链接用法
您应该像这样构建您的超链接
<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>
答案 2 :(得分:0)
您已设置超链接的样式,而不是标签。您需要为标签设置相同的触发器,因此它也可以对IsMouseOver事件做出反应。