ユーザーが 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 のシーケンスを最初に入力したときに正しく実行されますが、2 番目のシーケンスを入力すると、例外が発生してハイパーリンクの作成が失敗します。デバッグ中に変数を見ると、2 つの TextPointer が最初のシーケンスを指し続けているように見えます。