Изменение переднего плана гиперссылки без потери цвета при наведении - PullRequest
19 голосов
/ 10 августа 2009

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

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

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

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

Ответы [ 2 ]

35 голосов
/ 10 августа 2009

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

0 голосов
/ 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...