0

我正在尝试为 WPF 创建一个 LinkLabel 控件。本质上,我将从 TextBlock 创建 LinkLabel 并处理 MouseEnter、MouseLeave 和 MouseLeftButtonUp 事件。在后端,我有一个基类,它具有您希望通过 LinkLabel 看到的属性。对于 WPF 中的大多数其他可单击控件,有一个默认的 MouseEnter 动画,其中控件变为冰蓝色。当鼠标光标进入 TextBlock 时,我想复制此行为。我不确定我是否需要从 ButtonBase 或类似的东西派生。我有一个我能够将光标更改为一只手,并处理单击“LinkLabel”时的事件。如果访问这个看似默认的变色动画,那么我可能不得不求助于简单的前景色交换而没有平滑过渡。如果有人之前创建了自定义 WPF LinkLabel 或对此事有任何建议,您的意见将不胜感激。

4

2 回答 2

4

您现在可以使用 TextBlock 和 HyperLink 的组合创建相当于 WinForms 的 LinkLabel:

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

您不会获得“冰蓝色”鼠标悬停效果,但您会获得手形光标。我相信您可以使用简单的样式触发器来引入鼠标悬停效果。

“NavigateUri”属性适用于超链接位于 Frame 控件内的导航样式应用程序。在标准 WPF 应用程序中,您需要处理超链接的 Click 事件,并使用 Process.Start 以正确的 URL 启动 Web 浏览器。

于 2009-01-12T21:38:08.640 回答
0

我刚刚为按钮创建了一个样式,并在您想要 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>

希望这可以帮助!

于 2016-05-16T15:48:01.470 回答