J'ai vu plusieurs suggestions, que vous pouvez ajouter un lien hypertexte vers l'application WPF via le Hyperlink
contrôle.
Voici comment j'essaye de l'utiliser dans mon code:
<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>
J'obtiens l'erreur suivante:
La propriété "Texte" ne prend pas en charge les valeurs de type "Lien hypertexte".
Qu'est-ce que je fais mal?
RequestNavigateEventArgs
trouve dans l'System.Windows.Navigation
espace de noms.Process
etProcessStartInfo
sont tous les deux dans l'System.Diagnostics
espace de noms.En plus de la réponse de Fuji, nous pouvons rendre le gestionnaire réutilisable en le transformant en propriété attachée:
Et utilisez-le comme ceci:
la source
Hyperlink
n'est pas un contrôle, c'est un élément de contenu de flux , vous ne pouvez l'utiliser que dans des contrôles qui prennent en charge le contenu de flux, comme unTextBlock
.TextBoxes
n'ont que du texte brut.la source
Si vous souhaitez localiser la chaîne plus tard, ces réponses ne suffisent pas, je suggérerais quelque chose comme:
la source
À mon humble avis, le moyen le plus simple est d'utiliser un nouveau contrôle hérité de
Hyperlink
:la source
Notez également qu'il
Hyperlink
n'est pas nécessaire d'utiliser pour la navigation. Vous pouvez le connecter à une commande.Par exemple:
la source
J'ai utilisé la réponse dans cette question et j'ai eu un problème avec elle.
Il renvoie une exception:
{"The system cannot find the file specified."}
Après un peu d'enquête. Il se avère que si votre application WPF est .CORE que vous devez faire
UseShellExecute
pourtrue
.Ceci est mentionné dans la documentation Microsoft :
Donc, pour que cela fonctionne, vous devez ajouter
UseShellExecute
àtrue
:la source
UseShelExecute = true
une idée pourquoi?Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
et j'obtiens l'erreur "System.ComponentModel.Win32Exception: 'Le système ne trouve pas le fichier spécifié'" lorsque j'essaie de suivre le lien hypertexteJ'ai aimé l'idée d'Arthur d'un gestionnaire réutilisable, mais je pense qu'il existe un moyen plus simple de le faire:
De toute évidence, il pourrait y avoir des risques de sécurité avec le démarrage de tout type de processus, alors soyez prudent.
la source
J'espère que cela aidera aussi quelqu'un.
la source
L'un des plus beaux moyens à mon avis (car il est maintenant couramment disponible) est d'utiliser les comportements.
Cela demande:
Microsoft.Xaml.Behaviors.Wpf
code xaml:
ET
code de comportement:
la source