Link button in wpf Link button in wpf wpf wpf

Link button in wpf


If you don't want any of the normal Button style and just want something that looks like a hyperlink you could start with this

<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>

Here's the same as a 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" />    <Style.Triggers>        <Trigger            Property="IsMouseOver"            Value="true">            <Setter                Property="Foreground"                Value="Red" />        </Trigger>    </Style.Triggers></Style>

and you can use it like this:

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


<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's and Anderson's version placed the underline slightly wrong, here is an updated version that will just add an underline to any TextBlock that are inside the ContentPresenter.


Here's MichaC's suggestion implemented as a Style that you can reuse on any 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" />    <Setter Property="Cursor" Value="Hand" />    <Style.Triggers>        <Trigger Property="IsMouseOver" Value="true">            <Setter Property="Foreground" Value="Red" />        </Trigger>    </Style.Triggers></Style>