如何在GotFocus期间从WPF RichTextBox检索CaretPosition

本文关键字:WPF RichTextBox 检索 CaretPosition GotFocus | 更新日期: 2024-07-27 16:54:03

我有一个具有相同文本的TextBox和一个RichTextBox。每次我在RichTextBox中单击时,TextBox都应该使用相同的插入符号位置。我的第一个想法是:

void richTextBox_GotFocus(object sender, RoutedEventArgs e)
{
     vat textRange = new TextRange(rtfBox.Document.ContentStart, rtfBox.CaretPosition);
     plainTextBox.Focus();
     plainTextBox.CaretIndex = textRange.Text.Length;
}

但问题是RichTextBox还不知道事件处理程序中的CaretPosition。

对此有什么变通办法吗?

也许通过对RichTextBox进行子类化?

如何在GotFocus期间从WPF RichTextBox检索CaretPosition

如果使用Dispatcher.BeginInvoke运行该代码,则应在WPF确定插入符号位置等之后调用它。

例如

private void RichTextBox_GotFocus(object sender, RoutedEventArgs e)
{
    Dispatcher.BeginInvoke(new Action(UpdateTextBoxCaretPosition));
}
void UpdateTextBoxCaretPosition()
{
    var textRange = new TextRange(rtfBox.Document.ContentStart, rtfBox.CaretPosition);
    plainTextBox.Focus();
    plainTextBox.CaretIndex = textRange.Text.Length;
}