Подтвердить что ты не робот

Изменение переднего плана гиперссылки без потери цвета наведения

Я пишу приложение WPF, и я хочу, чтобы некоторые из моих гиперссылок были голубыми по умолчанию, а другие - зелеными. Нет проблем - я могу просто установить Foreground:

<TextBlock><Hyperlink Foreground="#0C0">Mark as done</Hyperlink></TextBlock>

Проблема в том, что когда я это делаю, эффект наведения исчезает. В обычной гиперссылке, когда я перемещаю мышь по ссылке, она становится красной, и когда я отворачиваю мышь, она возвращается к синему. Но в гиперссылке с назначенным свойством Foreground всегда этот цвет - красный-на-hover полностью подавлен.

Как я могу изменить цвет гиперссылки, не теряя поведение и цвет по умолчанию?

4b9b3361

Ответ 1

Настройка непосредственно переднего плана (как вы это сделали) не работает, а установка его в стиле тоже не работает, если только вы не "вывели" этот стиль из стиля Hyperlink по умолчанию (который должен включать триггер 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, но приведенный выше код выполнит задание.

Ответ 2

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

<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>