WPF 버튼을 링크처럼 보이게 하려면 어떻게 해야 하나요?
WPF에서 링크와 같은 스타일의 버튼을 사용하고 싶습니다.Microsoft 는, 이것을 Windows 의 다이얼로그 박스에서(일관성이 없는 것처럼 보입니다) 실시합니다.
파란색 글씨처럼 보여요.마우스 커서가 위로 이동하면 색상과 밑줄을 바꿉니다.
예:

내가 해냈다.(크리스찬, 앤더슨 아이즈, 마이클 덕분에) 하지만, 저는 이 노래를TextBlock내 단추 안에.
버튼 안에 텍스트 블록이 없어도 작동하도록 스타일을 개선하려면 어떻게 해야 합니까?
사용방법 XAML
<Button Style="{StaticResource HyperlinkLikeButton}">
<TextBlock>Edit</TextBlock>
</Button>
스타일 XAML
<Style x:Key="HyperlinkLikeButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HotTrackBrushKey}}" />
<Setter Property="Cursor" Value="Hand" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextDecorations" Value="Underline" />
</Style>
</ControlTemplate.Resources>
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
하이퍼링크 클래스/태그가 있는 것을 알고 있습니까?하이퍼링크처럼 보여 버튼으로도 사용할 수 있습니다(URI 및/또는 명령어를 사용하거나 이벤트를 클릭할 수 있습니다).
편집:
사용 예:
<TextBlock>
<Hyperlink Command="{Binding SomeCommand, ElementName=window}" CommandParameter="{Binding}">Link
</Hyperlink>
</TextBlock>
파티에 조금 늦었지만...
가장 심플하고 깨끗한 IMO 접근법:
<Style x:Key="HyperLinkButtonStyle" TargetType="Button">
<Setter Property="Focusable" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock>
<Hyperlink>
<Run Text="{TemplateBinding Content}" />
</Hyperlink>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
- 충실, 에뮬레이션 없음 : 하이퍼링크 자체만 사용합니다.
- 존경심 : 중요한 측면인 초점 유지
다음 스타일 또는 템플릿을 사용하는 경우 TextBlock 요소를 사용할 필요가 없습니다.
<ControlTemplate x:Key="HyperlinkLikeButtonTemplate" TargetType="{x:Type Button}">
<TextBlock x:Name="innerText" Foreground="{DynamicResource {x:Static SystemColors.HotTrackBrushKey}}" Cursor="Hand" >
<ContentPresenter />
</TextBlock>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsMouseOver" Value="true">
<Setter TargetName="innerText" Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter TargetName="innerText" Property="TextDecorations" Value="Underline" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="HyperlinkLikeButton" TargetType="{x:Type Button}">
<Setter Property="Template" Value="{StaticResource HyperlinkLikeButtonTemplate}" />
</Style>
사용방법 XAML
<Button Style="{StaticResource HyperlinkLikeButton}" Content="Edit" />
또는
<Button Style="{StaticResource HyperlinkLikeButton}">
Edit
</Button>
또는 템플릿을 직접 사용할 수 있습니다.
<Button Template="{StaticResource HyperlinkLikeButtonTemplate}" Content="Edit" />
버튼은 콘텐츠 컨트롤이지만 링크 스타일은 텍스트만 콘텐츠로 동작하는 것이 문제인 것 같습니다.이것이 당신이 가지고 있는 코드가 그렇게 설계된 이유입니다.콘텐트 프레젠터 대신 텍스트 블록을 지정함으로써 컨트롤 템플릿에서 작업할 수 있다고 생각합니다만, 거기에 바인드 되는 속성은 무엇입니까?그래서 제안하고 싶은 것은 버튼을 서브클래스로 하여 type string의 의존 속성을 선언하고 그 속성을 사용하여 ControlTemplate의 텍스트를 바인드하는 것입니다.
내가 놓친 게 아니라면, 그냥 스타일링 좀 해주시면 안 될까요?TextBlock스타일을 글로벌하게 적용하는 것이 아니라 인라인 방식으로 적용하는 경우, 어떻게 해야 합니까?예:
<Style x:Key="LinkButton" TargetType="TextBlock">
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Margin" Value="0,0,10,0" />
<Setter Property="TextDecorations" Value="Underline" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HotTrackBrushKey}}" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
</Style.Triggers>
</Style>
그래서:
<TextBlock Style="{StaticResource LinkButton}">Edit</TextBlock>
클릭을 활성화하려면MouseUp이벤트입니다.
언급URL : https://stackoverflow.com/questions/5122334/how-do-i-make-a-wpf-button-look-like-a-link
'programing' 카테고리의 다른 글
| Linux는 DOS 일시 중지에 상당합니까? (0) | 2023.04.14 |
|---|---|
| 데이터 바인딩을 통해 WPF 하이퍼링크의 텍스트를 설정하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
| 태그 또는 태그 부착에 권장되는 SQL 데이터베이스 설계 (0) | 2023.04.14 |
| matplotlib에서 축 문자 회전 (0) | 2023.04.14 |
| 사전 키에서 빠르게 배열 (0) | 2023.04.09 |