1

我有一个 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 子类化?

4

1 回答 1

2

如果您使用 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;
}
于 2012-07-30T07:02:21.153 回答