以编程方式启用 RichTextBox 并显示插入符号

Programatically enable RichTextBox and show caret

对于我目前正在处理的应用程序,我有一个以编程方式多次添加到表单的用户控件。用户控件的一部分是一个 RichTextBox,它设置为透明并禁用了点击功能,因此它更像一个标签并融入了用户控件。

当用户故意点击用户控件时,RichTextBox 的背景变为白色,IsReadOnly 设置为 False,并启用点击。

我试图纠正的问题是,用户仍然必须在键入之前再次单击 RichTextBox 以启用插入符号。我所有以编程方式设置插入符号的谷歌搜索和代码尝试都没有奏效。关于为什么以下代码不起作用的任何建议?我还需要做什么吗?

 contentBox.IsHitTestVisible = true;
 contentBox.Background = new SolidColorBrush(Color.FromRgb(240, 240, 240));
 contentBox.IsReadOnly = false;
 //manage caret position
 TextPointer newPointer = contentBox.CaretPosition;
 newPointer = newPointer.DocumentEnd;
 contentBox.CaretPosition = newPointer;

我认为您缺少的是之后将逻辑和键盘焦点设置到您的控件。 尝试

Dispatcher.BeginInvoke(
    new Action(delegate()
    {
        contentBox.Focus();         // Set Logical Focus
        System.Windows.Input.Keyboard.Focus(contentBox); // Set Keyboard Focus
    })
);