我正在尝试为WPF创建一个LinkLabel控件。基本上,我要从TextBlock创建LinkLabel并处理MouseEnter,MouseLeave和MouseLeftButtonUp事件。在后端,我有一个基类,它具有您期望通过LinkLabel看到的属性。在WPF中的其他大多数可单击控件中,都有一个默认的MouseEnter动画,其中控件变为冰蓝色。我想在鼠标光标进入TextBlock时复制这种行为。我不确定是否需要从ButtonBase派生或沿着这些线派生。我有一个能够将光标更改为一只手,并在单击“LinkLabel”时处理该事件。如果访问这个看似默认的变色动画,那么我可能不得不求助于一个简单的前景色交换而没有平滑过渡。如果任何人之前已经创建了一个自定义的WPF LinkLabel,或者对此问题有任何建议,您的意见将非常感谢。WPF LinkLabel实施策略
0
A
回答
4
您可以创建的WinForms'的LinkLabel的,现在使用的TextBlock的组合和超链接的等价物:
<TextBlock>Here is a <Hyperlink NavigateUri="http://example.com">link</Hyperlink></TextBlock>
你不会得到的‘冰蓝色’鼠标悬停效果,但你会得到的手形光标。我相信你可以使用简单的风格触发器来引入鼠标移过的效果。
“NavigateUri”属性适用于超链接位于Frame控件内的导航风格的应用程序。在标准的WPF应用程序中,您将需要处理超链接的Click事件,并使用Process.Start以正确的URL启动Web浏览器。
0
我只是创建了一个按钮的样式,并将样式应用到按钮,只要你想要LinkLabel的样子。单击按钮的Click事件用于执行单击文本时的功能。
<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>
希望这有助于!