2009-01-12 74 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> 

希望這有助於!