2010-07-06 116 views
1

我想在用戶在WPF RichTextBox中輸入時將某些文本轉換爲超鏈接。如何將文本轉換爲WPF RichTextBox FlowDocument中的超鏈接?

我第一次嘗試在它涉及到每個KEYUP運行此代碼:

Regex r = new Regex("[A-Z]{3}"); 
FlowDocument doc = this.inputBox.Document;    
String text = new TextRange(doc.ContentStart, doc.ContentEnd).Text; 

foreach (Match m in r.Matches(text)) 
{ 
    TextPointer start = doc.ContentStart.GetPositionAtOffset(m.Index + 2);     
    TextPointer end = doc.ContentStart.GetPositionAtOffset(m.Index + m.Length + 2); 
    Hyperlink sp = new Hyperlink(start, end); 
} 

這正常運行的用戶第一次輸入的3個大寫字母,ABC的順序,但超鏈接創建失敗與一個異常時,輸入第二個序列。在調試時查看變量,看起來兩個TextPointers始終指向第一個序列。

回答

0

我認爲你的問題可能是由於GetPositionAtOffset()方法的一個常見誤解。

GetPositionAtOffset返回的FlowDocument標記內的偏移,而不是可見的文本字符偏移

您插入第一個超鏈接後,FlowDocument的包含開始和結束標記:

<Hyperlink>the_regex_match</Hyperlink> 

這意味着FlowDocument的偏移不再與正則表達式匹配返回的明文字符索引對齊。

相關問題