반응형
WPF의 링크 버튼
Button을 LinkButton처럼 보이게 만들고 Hyperlink를 사용하고 싶지 않습니다 ... !!
모든 제안
일반적인 Button 스타일을 원하지 않고 하이퍼 링크처럼 보이는 것을 원한다면 이것으로 시작할 수 있습니다.
<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" />
<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와 Anderson의 버전은 밑줄을 약간 잘못 배치했습니다. 여기에 .NET TextBlock
내부에 밑줄을 추가하는 업데이트 된 버전 이 있습니다 ContentPresenter
.
다음 Style
은 모든 버튼에서 재사용 할 수 있도록 구현 된 MichaC의 제안입니다 .
<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>
가장 쉬운 방법 (내 응용 프로그램에서 수행) :
<TextBlock Name="..."
Text="..."
Cursor="Hand"
Foreground="Blue"
TextDecorations="Underline"
MouseLeftButtonUp=..."
/>
you have full control on TextDecoration, e.g. change pen style or offset. take a look at this link to find out more: http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.underline.aspx
Another solution using Hyperlink
is to put in inside TextBlock
.
<TextBlock>
<Hyperlink Click="...">
<TextBlock Text="Link text" />
</Hyperlink>
</TextBlock>
Why do you not want to use Hyperlink?
<Button>
<Hyperlink>
</Button>
참고URL : https://stackoverflow.com/questions/780426/link-button-in-wpf
반응형
'code' 카테고리의 다른 글
Python urllib2 : URL에서 JSON 응답 수신 (0) | 2020.09.11 |
---|---|
iOS 13에서 다크 모드 변경 비활성화 (0) | 2020.09.11 |
void 포인터를 삭제하는 것이 안전합니까? (0) | 2020.09.11 |
Tic Tac Toe 게임 오버 결정을위한 알고리즘 (0) | 2020.09.11 |
MySQL DECLARE의 SELECT INTO 변수로 인해 구문 오류가 발생합니까? (0) | 2020.09.11 |