2012-02-14 169 views
7

我試圖動態地添加一些使用WPF和C#的RichTextBox的超鏈接,但沒有太大的成功。我的代碼總結如下:動態添加超鏈接到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!"); 
} 

當我運行這個RichTextBox顯示鏈接,但它是灰色的,我不能點擊它?有人可以指出我可能會出錯的地方嗎?

謝謝。

回答

9

默認情況下中的Document被禁用,將RichtTextBox.IsDocumentEnabled設置爲true

+0

謝謝!作品一種享受。 – PaulN 2012-02-14 15:07:30

+0

@PaulN:不客氣,很高興幫助:) – 2012-02-14 15:16:36

+0

爲什麼這不是默認情況下? – 2017-09-14 08:03:21

2

用於讀取richTextBox文本,並將其轉變成一個鏈接一個簡單的辦法:

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()); 
}