Làm thế nào tôi có thể làm cho Nút trông giống như LinkButton và tôi không muốn sử dụng Siêu liên kết ... !!
Bất kỳ đề xuất
Làm thế nào tôi có thể làm cho Nút trông giống như LinkButton và tôi không muốn sử dụng Siêu liên kết ... !!
Bất kỳ đề xuất
Câu trả lời:
Nếu bạn không muốn bất kỳ kiểu Nút thông thường nào và chỉ muốn một cái gì đó giống như một siêu liên kết, bạn có thể bắt đầu với
<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>
Đây giống như một kiểu:
<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>
và bạn có thể sử dụng nó như thế này:
<Button Style="{StaticResource LinkButton}" Content="Clicky" />
<Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="Gray" /> </Trigger>
để xử lý trạng thái 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>
Phiên bản của MichaC và Anderson đã đặt gạch dưới hơi sai, đây là phiên bản cập nhật sẽ chỉ thêm một gạch dưới vào bất kỳ phần nào TextBlock
bên trong ContentPresenter
.
Đây là đề xuất của MichaC được triển khai như một gợi ý Style
mà bạn có thể sử dụng lại trên bất kỳ nút nào:
<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>
Cách dễ nhất (tôi làm điều này trong ứng dụng của mình):
<TextBlock Name="..."
Text="..."
Cursor="Hand"
Foreground="Blue"
TextDecorations="Underline"
MouseLeftButtonUp=..."
/>
bạn có toàn quyền kiểm soát TextDecoration, ví dụ như thay đổi kiểu bút hoặc bù đắp. hãy xem liên kết này để tìm hiểu thêm: http://msdn.microsoft.com/en-us/library/system.windows.textdecaries.underline.aspx
Tại sao bạn không muốn sử dụng Hyperlink?
<Button>
<Hyperlink>
</Button>