【问题标题】:How do I convert text to hyperlink in a WPF RichTextBox FlowDocument?如何在 WPF RichTextBox FlowDocument 中将文本转换为超链接?
【发布时间】:2011-02-19 08:31:18
【问题描述】:

当用户在 WPF RichTextBox 中输入时,我正在尝试将一些文本转换为超链接。

我的第一次尝试涉及在每个 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 时,此操作正确运行,但当输入第二个序列时,超链接创建失败并出现异常。调试时查看变量,似乎两个 TextPointer 一直指向第一个序列。

【问题讨论】:

    标签: c# wpf richtextbox hyperlink flowdocument


    【解决方案1】:

    我认为您的问题可能是由于对 GetPositionAtOffset() 方法的作用的常见误解。

    GetPositionAtOffset 返回FlowDocument 标记内的偏移量,而不是可见文本字符偏移量

    插入第一个超链接后,FlowDocument 包含开始和结束标签:

    <Hyperlink>the_regex_match</Hyperlink>
    

    这意味着 FlowDocument 偏移不再与 RegEx 匹配返回的纯文本字符索引对齐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      相关资源
      最近更新 更多