WPF LinkLabel实施策略

时间:2009-01-12 21:28:08

标签: wpf animation default linklabel

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

2 个答案:

答案 0 :(得分:4)

您现在可以使用TextBlock和HyperLink的组合创建等效的WinForms的LinkLabel:

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

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

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

答案 1 :(得分: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>

希望这有帮助!