Bagaimana saya bisa membuat Button terlihat seperti LinkButton, dan saya tidak ingin menggunakan Hyperlink ... !!
Ada saran
wpf
wpf-controls
Prashant Cholachagudda
sumber
sumber
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" />
sumber
<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 dalamContentPresenter
.sumber
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>
sumber
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
sumber
Solusi lain yang digunakan
Hyperlink
adalah dengan memasukkan ke dalamTextBlock
.<TextBlock> <Hyperlink Click="..."> <TextBlock Text="Link text" /> </Hyperlink> </TextBlock>
sumber
Mengapa Anda tidak ingin menggunakan Hyperlink?
<Button> <Hyperlink> </Button>
sumber