2009-04-23 137 views
78

如何讓Button看起來像LinkBut​​ton,並且我不想使用 超鏈接... !!wpf中的鏈接按鈕

任何建議

+1

如果有人關心,這裏所有答案的問題是答案中的鏈接實際上並不像鏈接那樣。他們不知道訪問過的URL歷史記錄,並且顏色不是系統URL的顏色。但是,如果你沒有這些要求,他們沒關係。 – Will 2010-10-20 18:31:03

+0

我想弄清楚如何使用正確的Windows顏色。 http://stackoverflow.com/questions/5094447 – 2011-02-23 22:42:39

回答

131

如果你不希望任何普通按鈕樣式,只是想要的東西,看起來像你可以用這個

<Button Margin="5" Content="Test" Cursor="Hand"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <TextBlock TextDecorations="Underline"> 
       <ContentPresenter /> 
      </TextBlock> 
     </ControlTemplate> 
    </Button.Template> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Setter Property="Foreground" Value="Blue" /> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="true"> 
        <Setter Property="Foreground" Value="Red" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

這裏開始的超鏈接是相同的風格:

<Style 
    x:Key="LinkButton" 
    TargetType="Button"> 
    <Setter 
     Property="Template"> 
     <Setter.Value> 
      <ControlTemplate 
       TargetType="Button"> 
       <TextBlock 
        TextDecorations="Underline"> 
       <ContentPresenter /></TextBlock> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter 
     Property="Foreground" 
     Value="Blue" /> 
    <Style.Triggers> 
     <Trigger 
      Property="IsMouseOver" 
      Value="true"> 
      <Setter 
       Property="Foreground" 
       Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

,你可以使用它像這樣:

<Button Style="{StaticResource LinkButton}" Content="Clicky" /> 
+0

請注意,這裏有一個錯字 - LinkBut​​on – GarethD 2012-02-03 12:17:51

+2

這個答案產生一個按鈕,在下劃線和文本之間有一個空格。 @Christians答案可以解決這個問題。 – 2012-02-22 04:52:57

1

爲什麼你不想使用超鏈接?

<Button> 
    <Hyperlink> 
</Button> 
+0

因爲,每當我嘗試在Visual樹中獲得父項,它會拋出一個異常,說超鏈接不是可視化的或Visual3d – 2009-04-23 05:55:48

+0

我想要使用它。我得到它的工作,但我似乎無法擺脫按鈕邊緣的陰影。你是怎樣做的? – 2010-01-18 22:01:07

29

這裏的MichaC的建議作爲Style實現的,你可以在任何按鈕重用:

<Style x:Key="LinkButton" TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <TextBlock TextDecorations="Underline"> 
        <ContentPresenter /> 
       </TextBlock> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="Blue" /> 
    <Setter Property="Cursor" Value="Hand" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
29
<Style x:Key="LinkButton" 
     TargetType="Button" 
     BasedOn="{StaticResource ResourceKey={x:Type Button}}" 
     > 

    <Setter Property="Width" Value="Auto"/> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <ContentPresenter Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            VerticalAlignment="Center" 
            > 
        <ContentPresenter.Resources> 
         <Style TargetType="{x:Type TextBlock}"> 
          <Setter Property="TextDecorations" Value="Underline" /> 
         </Style> 
        </ContentPresenter.Resources> 
       </ContentPresenter> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="Blue" /> 
    <Setter Property="Cursor" Value="Hand" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

MichaC的和安德森的版本放在下劃線稍有不當,這裏是一個更新版本,將只需要加一個下劃線任何TextBlockContentPresenter之內。

7

使用Hyperlink的另一個解決方案是放入TextBlock的內部。

<TextBlock> 
    <Hyperlink Click="..."> 
     <TextBlock Text="Link text" /> 
    </Hyperlink> 
</TextBlock>