Стратегия внедрения WPF LinkLabel - PullRequest
0 голосов
/ 13 января 2009

Я пытаюсь создать элемент управления LinkLabel для WPF. По сути, я собираюсь создать LinkLabel из TextBlock и обрабатывать события MouseEnter, MouseLeave и MouseLeftButtonUp. В конце у меня есть базовый класс, который имеет свойства, которые вы ожидаете увидеть с помощью LinkLabel. В большинстве других интерактивных элементов управления в WPF есть анимация по умолчанию для MouseEnter, в которой элемент управления становится Ice Blue. Я хотел бы дублировать это поведение, когда курсор мыши вводится над TextBlock. Я не уверен, что мне нужно извлечь из ButtonBase или что-то в этом роде. У меня есть возможность сменить курсор на руку и обработать событие, когда щелкает «LinkLabel». Если я обращаюсь к этой, казалось бы, изменяющей цвет анимации по умолчанию, тогда мне, возможно, придется прибегнуть к простому обмену цветов на переднем плане без плавного перехода. Если кто-то ранее создал пользовательский WPF LinkLabel или у него есть какие-либо советы по этому вопросу, ваш вклад будет очень признателен.

Ответы [ 2 ]

4 голосов
/ 13 января 2009

Вы можете создать эквивалент LinkLabel WinForms прямо сейчас, используя комбинацию TextBlock и HyperLink:

<TextBlock>Here is a <Hyperlink NavigateUri="http://example.com">link</Hyperlink></TextBlock>

Вы не получите эффект наведения мыши "ледяной синий", но вы получите курсор в виде руки. Я уверен, что вы можете представить свои эффекты при наведении курсора, используя простой стиль триггера.

Свойство NavigateUri работает в приложениях в стиле навигации, где гиперссылка находится внутри элемента управления Frame. В стандартном приложении WPF вместо этого вы захотите обработать событие Click гиперссылки и использовать Process.Start для запуска веб-браузера с правильным URL-адресом.

0 голосов
/ 16 мая 2016

Я только что создал стиль для кнопки и применяю стиль к кнопке всякий раз, когда вы хотите, чтобы LinkLabel выглядел. Событие нажатия кнопки используется для выполнения функции при нажатии на текст.

<Style x:Key="LinkLabelButtonStyle" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="CornflowerBlue"></Setter>
            </Trigger>
        </Style.Triggers>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="Transparent">
                        <ContentPresenter/>
                    </Border>                            
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock TextDecorations="Underline" Text="{TemplateBinding Content}"></TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>     
        <Setter Property="Foreground" Value="DarkBlue"></Setter>
        <Setter Property="MinWidth" Value="90"></Setter>
        <Setter Property="HorizontalAlignment" Value="Left"></Setter>
        <Setter Property="Padding" Value="5"></Setter>
        <Setter Property="Margin" Value="5"></Setter>
        <Setter Property="Cursor" Value="Hand"></Setter>
    </Style>

Вы можете разместить над стилем в Window.Resources, чтобы вы могли использовать его во всем окне.

Затем применяйте стиль к кнопке, когда хотите, чтобы LinkLabel выглядел.

<Button Name="LinkLabelLookALikeButton" Content="Text goes here" Style="{StaticResource LinkLabelButtonStyle}" Click="Event_Goes_Here">                        
                </Button>

Надеюсь, это поможет!

...