2010-07-06 126 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的偏移不再与正则表达式匹配返回的明文字符索引对齐。