2012-02-14 2 views
7

J'essaie d'ajouter dynamiquement des liens hypertexte à un RichTextBox en utilisant WPF et C# mais je n'ai pas beaucoup de succès. Mon code est résumé ci-dessous:Ajout dynamique de liens hypertexte à un RichTextBox

FlowDocument doc = new FlowDocument(); 
richTextBox1.Document = doc; 
richTextBox1.IsReadOnly = true; 

Paragraph para = new Paragraph(); 
doc.Blocks.Add(para); 

Hyperlink link = new Hyperlink(); 
link.IsEnabled = true; 
link.Inlines.Add("Hyperlink"); 
link.NavigateUri = new Uri("http://www.google.co.uk"); 
link.Click += new RoutedEventHandler(this.link_Click); 
para.Inlines.Add(link); 

.... 

protected void link_Click(object sender, RoutedEventArgs e) { 
    MessageBox.Show("Clicked link!"); 
} 

Quand je lance ce RichTextBox montrent le lien, mais il est gris et je ne peux pas cliquer dessus? Est-ce que quelqu'un peut me dire où je pourrais me tromper?

Merci.

Répondre

9

Le Document dans un RichTextBox est désactivé par défaut, définissez RichtTextBox.IsDocumentEnabled à true.

+0

Merci! Fonctionne un régal. – PaulN

+0

@PaulN: De rien, heureux que cela ait aidé :) –

+0

Pourquoi cette option n'est pas activée par défaut? –

2

Une solution simple pour lire un texte richTextBox et le transformer en un lien:

richTextBox.IsDocumentEnabled = true; 

TextPointer t1 = richTextBox1.Document.ContentStart; 
TextPointer t2 = richTextBox1.Document.ContentEnd; 
TextRange tr = TextRange(t1,t2); 
string URI = tr.Text; 

Hyperlink link = new Hyperlink(t1, t2); 

link.IsEnabled = true; 
link.NavigateUri = new Uri(URI); 
link.RequestNavigate += new RequestNavigateEventHandler(link_RequestNavigate); 


private void link_RequestNavigate(object sender,RequestNavigateEventArgs e) 
{ 
    System.Diagnostics.Process.Start(e.Uri.AbsoluteUri.ToString()); 
} 
Questions connexes