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 に答える