Question

Je me suis juste trouvé un nouveau défi: Faire un traitement de texte qui est dans le traitement de plus comme le web que le texte brut. La conception d'un cadre agréable pour ce que je ne peux pas attendre pour commencer, mais je dois savoir quelles sont les possibilités du côté de l'interface graphique (il aura probablement des charges de défis GUI).

Donc, la chose de base que je besoin d'une sorte de contrôle où je peux faire partie de mon texte cliquable / off-able la souris.

Je suis un peu nouveau pour WPF et ne savez pas comment faire cela. Quelqu'un at-il une idée comment faire cela? Y at-il des exemples? Y at-il contrôle déjà pour cela?

Merci d'avance

EDIT:

J'ai trouvé un moyen de le faire avec un richtextbox:

// Create a FlowDocument to contain content for the RichTextBox.
FlowDocument myFlowDoc = new FlowDocument();

// Add paragraphs to the FlowDocument.

Hyperlink myLink = new Hyperlink();
myLink.Inlines.Add("hyperlink");
myLink.NavigateUri = new Uri("http://www.stackoverflow.com");

// Create a paragraph and add the Run and hyperlink to it.
Paragraph myParagraph = new Paragraph();
myParagraph.Inlines.Add("check this link out: ");
myParagraph.Inlines.Add(myLink);
myFlowDoc.Blocks.Add(myParagraph);

// Add initial content to the RichTextBox.
richTextBox1.Document = myFlowDoc;

Je reçois maintenant un lien agréable dans ma zone de texte ... sauf quand je clique dessus, rien ne se passe. qu'est-ce que je manque ici?

Était-ce utile?

La solution

Vous pouvez utiliser le Hyperlink classe. Il est un FrameworkContentElement, vous pouvez l'utiliser dans un TextBlock ou FlowDocument ou nulle part ailleurs vous pouvez incorporer le contenu.

<TextBlock>
    <Run>Text</Run>
    <Hyperlink NavigateUri="http://stackoverflow.com">with</Hyperlink>
    <Run>some</Run>
    <Hyperlink NavigateUri="http://google.com">hyperlinks</Hyperlink>
</TextBlock>

Vous pouvez regarder à l'aide d'un RichTextBox dans le cadre de votre éditeur. Ce sera l'hôte d'un FlowDocument, qui peut contenir du contenu tels que des hyperliens.


Mise à jour: Il y a deux façons de gérer les clics sur le lien hypertexte. La première est de gérer le RequestNavigate événement . Il est routé l'événement, de sorte que vous pouvez soit attacher un gestionnaire à la Hyperlink lui-même ou vous pouvez attacher un à un élément supérieur dans l'arbre, comme la fenêtre ou RichTextBox:

// On a specific Hyperlink
myLink.RequestNavigate +=
    new RequestNavigateEventHandler(RequestNavigateHandler);
// To handle all Hyperlinks in the RichTextBox
richTextBox1.AddHandler(Hyperlink.RequestNavigateEvent,
    new RequestNavigateEventHandler(RequestNavigateHandler));

L'autre façon consiste à utiliser en réglant le commandant href = "http://msdn.microsoft.com/en-us/library/system.windows.documents.hyperlink.command.aspx" rel = "noreferrer"> la propriété de commande sur le lien hypertexte vers une la mise en œuvre de ICommand. La méthode Exécuté sur la ICommand sera appelée lorsque l'utilisateur clique sur un lien hypertexte.

Si vous voulez lancer un navigateur dans le gestionnaire, vous pouvez passer à l'URI Process.Start :

private void RequestNavigateHandler(object sender, RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}

Autres conseils

Notez que vous devez également définir les propriétés suivantes sur votre RichTextBox ou les liens hypertexte seront désactivés et ne se déclenche pas des événements ponctuels. Sans IsReadOnly vous devez Ctrl-cliquez sur les liens hypertexte, avec IsReadOnly ils tirent avec un clic gauche régulier.

<RichTextBox
    IsDocumentEnabled="True"
    IsReadOnly="True">

La façon la plus simple est de gérer l'événement RequestNavigate comme ceci:


...
myLink.RequestNavigate += HandleRequestNavigate;
...

private void HandleRequestNavigate(object sender, RoutedEventArgs e)
{
   var link = (Hyperlink)sender;
   var uri = link.NavigateUri.ToString();
   Process.Start(uri);
   e.Handled = true;
}

Il y a quelques problèmes au démarrage d'un navigateur par défaut en passant URL pour la Process.Start et vous pouvez Google pour une meilleure façon de mettre en œuvre le gestionnaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top