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