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

时间:2012-07-27 15:43:39

标签: c# .net wpf textbox focus

我有一个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吗?

1 个答案:

答案 0 :(得分:2)

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

e.g。

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;
}