Bagaimana saya bisa membuat Button terlihat seperti LinkButton, dan saya tidak ingin menggunakan Hyperlink ... !!
Ada saran
Bagaimana saya bisa membuat Button terlihat seperti LinkButton, dan saya tidak ingin menggunakan Hyperlink ... !!
Ada saran
Jawaban:
Jika Anda tidak menginginkan gaya Tombol normal dan hanya menginginkan sesuatu yang terlihat seperti hyperlink, Anda dapat memulai dengan ini
<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>
Ini sama dengan gaya:
<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>
dan Anda bisa menggunakannya seperti ini:
<Button Style="{StaticResource LinkButton}" Content="Clicky" />
<Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="Gray" /> </Trigger>
untuk menangani status IsEnabled
<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>
Versi MichaC dan Anderson menempatkan garis bawah sedikit salah, berikut adalah versi terbaru yang hanya akan menambahkan garis bawah ke semua TextBlock
yang ada di dalam ContentPresenter
.
Berikut saran MichaC yang diimplementasikan sebagai Style
yang dapat Anda gunakan kembali pada tombol apa pun:
<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>
Cara termudah (saya melakukan ini di aplikasi saya):
<TextBlock Name="..."
Text="..."
Cursor="Hand"
Foreground="Blue"
TextDecorations="Underline"
MouseLeftButtonUp=..."
/>
Anda memiliki kendali penuh pada TextDecoration, misalnya mengubah gaya pena atau offset. lihat tautan ini untuk mengetahui lebih lanjut: http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.underline.aspx
Solusi lain yang digunakan Hyperlink
adalah dengan memasukkan ke dalam TextBlock
.
<TextBlock>
<Hyperlink Click="...">
<TextBlock Text="Link text" />
</Hyperlink>
</TextBlock>
Mengapa Anda tidak ingin menggunakan Hyperlink?
<Button>
<Hyperlink>
</Button>