WPF - 超链接样式不会随着标签内部的样式而改变

时间:2011-02-01 22:31:24

标签: wpf hyperlink label styles

鉴于以下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>

3 个答案:

答案 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事件做出反应。