2009-01-12 114 views
0

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

回答

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> 

希望这有助于!