如何从WPF RichTextBox的TextChangedEventArgs中提取更改

时间:2015-02-16 22:53:22

标签: c# .net wpf

我正在使用WPF RichTextBox,我想将它与另一个RichTextBox同步(在另一个窗口中)。我正在尝试做的是当TextChanged事件发生时我尝试提取用户的更改,所以这是我尝试的(插入):

void rtb_TextChanged(object sender, TextChangedEventArgs e)
{
    var change = e.Changes.FirstOrDefault();
    var s = sender as RichTextBox;

    var start = s.CaretPosition.GetPositionAtOffset(change.Offset);
    var end = s.CaretPosition.GetPositionAtOffset(change.Offset + change.AddedLength);
    var range = new TextRange(start, end);
}

然而,Offset和AddedLength值似乎有点不确定。当我输入第一个字符时Offset是1(我预期为0)而AddedLength是3(我预期为1)然后是第二个字符Offset = 3和AddedLength = 1.此外,当有5个字符时,s.CaretPosition.GetPositionAtOffset(3)返回空值。总而言之,我对如何根据事件参数从RichTextBox获取有问题的内容感到困惑。你能提出一些建议吗?

1 个答案:

答案 0 :(得分:1)

您需要阅读MSDN中描述 TextChangedEventArgs 属性的以下link。当事件发生时,底层格式可能会有多处更改,因此您需要从头到尾一次处理所提供的 e.Changes 条目集合。

您不应该查看插入位置,因为这不会告诉您基础文本发生了什么。同样,这在提供的链接中有更详细的解释。