XAML에서 간단한 하이퍼링크를 만드는 방법
제가 원하는 건 XAML에 하이퍼링크를 만드는 겁니다. 다 해봤어요.전 못하겠어요.
이것의 구문은 무엇입니까?
<StackPanel Width="70" HorizontalAlignment="Center">
<Hyperlink Click="buttonClose_Click" Cursor="Hand"
Foreground="#555" Width="31" Margin="0 0 0 15"
HorizontalAlignment="Right">Close</Hyperlink>
<Button Width="60" Margin="0 0 0 3">Test 1</Button>
<Button Width="60" Margin="0 0 0 3">Test 2</Button>
<Button Width="60" Margin="0 0 0 3">Test 3</Button>
<Button Width="60" Margin="0 0 0 3">Test 4</Button>
</StackPanel>
Visual Studio 팀:Visual Studio 2010에서 Clippy가 팝업으로 "하이퍼링크를 만들려고 하는 것 같습니다"라고 말하고 그 방법을 가르쳐 주었으면 합니다.MEF로 하면 안 돼요?복고풍으로 하면 좋을 것 같습니다.또, 「HTML로 이미 알고 있는 것을 어떻게 할 것인가」라고 하는 사소한 문제도, XAML에 의한 학습 프로세스중에 많은 시간을 소비합니다.
StackPanel에 하이퍼링크를 추가할 수 없습니다.실제로 컴파일 시 오류가 아닌 것에 놀랐습니다.이는 하이퍼링크가 WPF의 "제어" 쪽에 존재하지 않기 때문입니다.<Button>
그리고.<StackPanel>
직사각형의 화면 덩어리에 배치되어 있는 다른 것들로부터 내려오는 것.UIElement
대신, 사물의 "텍스트" 쪽에 살고 있습니다.<Bold>
그리고.<Run>
그리고.<Paragraph>
그리고 단어에 따라 행과 단락을 따라 흘러내리는 다른 일반적으로 텍스처한 것TextElement
.
레이아웃 동작이 다른 두 개의 클래스 계층이 있다는 것을 알게 되면 하이퍼링크는 사물의 "텍스트" 쪽에 있습니다(예를 들어, 하이퍼링크가 중간에 있는 단락을 쉽게 만들 수 있고, 하이퍼링크가 줄 바꿈에 걸쳐 줄바꿈할 수도 있습니다).
하지만 처음 시작할 때는 그렇게 쉽게 발견할 수 없어요.
두 세계를 혼합하여 하이퍼링크를 컨트롤로 사용하려면 텍스트 블록에 하이퍼링크를 넣기만 하면 됩니다.TextBlock은 텍스트와 유사한 것(하이퍼링크를 포함할 수 있음)을 포함하는 제어 가능한 것(StackPanel에 넣을 수 있음)입니다.
<TextBlock><Hyperlink Click="buttonClose_Click">Close</Hyperlink></TextBlock>
사용자 정의 컨트롤 템플릿과 함께 단추를 사용할 수 있습니다. 아래 코드는 제한된 하이퍼링크 스타일 버튼(예: 텍스트 하이퍼링크만 지원)이지만 올바른 방향으로 안내할 수 있습니다.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="Link" TargetType="Button">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="Blue"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline"
Text="{TemplateBinding Content}"
Background="{TemplateBinding Background}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Button Content="Click Me!" Style="{StaticResource Link}"/>
</Page>
이것을 시험해 보세요.
<TextBlock>
<Hyperlink RequestNavigate="Hyperlink_RequestNavigate"
NavigateUri="http://www.msn.com">MSN</Hyperlink>
</TextBlock>
private void Hyperlink_RequestNavigate(object sender,
System.Windows.Navigation.RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}
<TextBlock>
<Hyperlink NavigateUri="{Binding YourUri}" RequestNavigate="YourRequestNavigate">
<TextBlock Text="{Binding YourText}" />
</Hyperlink>
</TextBlock>
이렇게 하면 중첩된 텍스트 블록에 바인딩된 텍스트가 모두 링크됩니다. 더 나은 방법을 찾지 못했습니다. 가능하면 첫 번째 텍스트 블록이 없는 것이 좋습니다.이것은 DataTemplates에도 유효합니다.
단순한 텍스트 값 이외의 다른 값에 바인딩할 경우 다음을 사용해야 할 수 있습니다.ContentPresenter
그렇지 않으면 아무것도 표시되지 않습니다.XML 데이터 소스에 바인드 하고 있는 경우, 이것이 해당될 수 있습니다.
IsMouseOver 속성 트리거는 텍스트에 밑줄을 표시합니다.
XML 에 바인드 하고 있는 예를 다음에 나타냅니다.
<Style x:Key="JobNumberStyleButton" TargetType="{x:Type Button}">
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock>
<ContentPresenter
Margin="0,0,0,0"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="False"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock Padding="0,0,0,0" Margin="0,0,0,0">
<Underline>
<ContentPresenter
Margin="0,0,0,0"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="False"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Underline>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
Hyperlink Button을 사용하면 됩니다.클릭하면 웹 브라우저에 URL이 표시됩니다.
<HyperlinkButton
NavigateUri="https://dev.windowsphone.com"
TargetName="_blank"
Content="Windows Phone Dev Center" />
일반적으로 하이퍼링크의 의미는 사용자를 다른 페이지로 보내거나 일반적으로 다른 리소스로 말할 수 있도록 앵커를 지정하는 것입니다. 따라서 하이퍼링크는 다음과 같이 구현되고 해당 리소스의 위치를 지정해야 합니다.
<HyperLink NavigateUri="http://www.site.com">
Web Site
</HyperLink>
단, 이 블로그 투고는 HyperLink로 사용되며 클릭 이벤트를 지원하는 커스텀 TextBlock을 포함하고 있습니다.
mvvmcross를 사용하는 UWP에서는 이것을 사용하고 있습니다.
<HyperlinkButton Content="{Binding TextSource, ConverterParameter=MyUrl, Converter={StaticResource Language},
FallbackValue=_MyUrl}" NavigateUri="http://www.google.com" />
언급URL : https://stackoverflow.com/questions/531621/how-to-make-a-simple-hyperlink-in-xaml
'source' 카테고리의 다른 글
SwiftUI - 뷰에 하드코딩된 네비게이션을 피하는 방법 (0) | 2023.04.19 |
---|---|
기본 스타일에서 스타일 상속 (0) | 2023.04.19 |
NSAray를 통해 어떻게 반복해야 하나요? (0) | 2023.04.19 |
Microsoft 의 사용법.Office.Interop.MS Office가 설치되지 않은 머신에서 뛰어난 성능을 발휘하시겠습니까? (0) | 2023.04.19 |
MS Excel 데이터를 SQL Server에 붙여넣기 (0) | 2023.04.19 |