Eu já vi várias sugestões, que você pode adicionar hiperlink ao aplicativo WPF através do Hyperlink
controle.
Aqui está como eu estou tentando usá-lo no meu código:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="BookmarkWizV2.InfoPanels.Windows.UrlProperties"
Title="UrlProperties" Height="754" Width="576">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Grid>
<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.RowSpan="2">
<StackPanel >
<DockPanel LastChildFill="True" Margin="0,5">
<TextBlock Text="Url:" Margin="5"
DockPanel.Dock="Left" VerticalAlignment="Center"/>
<TextBox Width="Auto">
<Hyperlink NavigateUri="http://www.google.co.in">
Click here
</Hyperlink>
</TextBox>
</DockPanel >
</StackPanel>
</ScrollViewer>
</Grid>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,7,2,7" Grid.Row="1" >
<Button Margin="0,0,10,0">
<TextBlock Text="Accept" Margin="15,3" />
</Button>
<Button Margin="0,0,10,0">
<TextBlock Text="Cancel" Margin="15,3" />
</Button>
</StackPanel>
</Grid>
</Window>
Estou recebendo o seguinte erro:
A propriedade 'Text' não suporta valores do tipo 'Hyperlink'.
O que estou fazendo de errado?
RequestNavigateEventArgs
está noSystem.Windows.Navigation
espaço para nome.Process
eProcessStartInfo
estão ambos noSystem.Diagnostics
espaço para nome.Além da resposta da Fuji, podemos tornar o manipulador reutilizável, transformando-o em uma propriedade anexada:
E use-o assim:
fonte
Hyperlink
não é um controle, é um elemento de conteúdo de fluxo , você pode usá-lo apenas em controles que suportam conteúdo de fluxo, como aTextBlock
.TextBoxes
possui apenas texto sem formatação.fonte
Se você deseja localizar a string mais tarde, essas respostas não são suficientes, sugeriria algo como:
fonte
IMHO a maneira mais simples é usar o novo controle herdado de
Hyperlink
:fonte
Observe também que
Hyperlink
não precisa ser usado para navegação. Você pode conectá-lo a um comando.Por exemplo:
fonte
Eu usei a resposta nesta pergunta e tive problemas com ela.
Ele retorna exceção:
{"The system cannot find the file specified."}
Depois de um pouco de investigação. Acontece que, se seu aplicativo WPF for .CORE, você precisará fazê
UseShellExecute
-lotrue
.Isso é mencionado nos documentos da Microsoft :
Então, para fazer este trabalho você precisa adicionado
UseShellExecute
paratrue
:fonte
UseShelExecute = true
alguma idéia do porquê?Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
e recebo o erro "System.ComponentModel.Win32Exception: 'O sistema não pode encontrar o arquivo especificado'" quando tento seguir o hiperlinkGostei da ideia de Arthur de manipulador reutilizável, mas acho que há uma maneira mais simples de fazer isso:
Obviamente, pode haver riscos de segurança ao iniciar qualquer tipo de processo, portanto, tenha cuidado.
fonte
Espero que isso ajude alguém também.
fonte
Uma das maneiras mais bonitas na minha opinião (já que agora está disponível) é usar comportamentos.
Isso requer:
Microsoft.Xaml.Behaviors.Wpf
código xaml:
E
código de comportamento:
fonte