我正在使用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获取有问题的内容感到困惑。你能提出一些建议吗?
答案 0 :(得分:1)
您需要阅读MSDN中描述 TextChangedEventArgs 属性的以下link。当事件发生时,底层格式可能会有多处更改,因此您需要从头到尾一次处理所提供的 e.Changes 条目集合。
您不应该查看插入位置,因为这不会告诉您基础文本发生了什么。同样,这在提供的链接中有更详细的解释。