WPF - стиль гиперссылки не меняется со стилем метки внутри - PullRequest
1 голос
/ 02 февраля 2011

Учитывая следующую разметку XAML, я ожидаю, что текст в гиперссылке станет оранжевым, когда я наведу на него курсор, так как я устанавливаю цвет переднего плана на его родительском элементе управления, и он должен фильтроваться по Свойство Значение Наследование . Тем не менее, он остается черным. Что мне нужно сделать?

<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 вместо внутренней метки заставляет стиль работать должным образом - TextBlock выбирает цвет переднего плана у своего родителя, а метка - нет.

1010 *, например *

<Label>
    <Hyperlink Style="{StaticResource DemoLink}">
        <TextBlock Text="Text that does change colour on mouse over" />
    </Hyperlink>
</Label>

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Кажется, что Label не зависит от 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, поскольку у него нет этой проблемы

<Hyperlink Name="DemoHyperlink" Style="{StaticResource DemoLink}">
    <TextBlock Text="This is some text that should change colour on mouse over"/>
</Hyperlink>
1 голос
/ 01 мая 2019

@ Фредрик объяснил намного выше.Таким образом, здесь может быть простой стиль и использование Гиперссылки

Вы должны создать свою Гиперссылку следующим образом

<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>
0 голосов
/ 02 февраля 2011

Вы установили стиль для гиперссылки, а не метки. Вам необходимо установить тот же триггер для метки, чтобы он также мог реагировать на событие IsMouseOver.

...