如何在RichTextBox中选择文本,同时将键盘焦点保持在另一个TextBox中

时间:2014-05-16 17:48:20

标签: c# wpf winforms

我正在使用WPF中的一个聊天窗口来托管Forms.RichTextBox。

<WindowsFormsHost x:Name="wfh">
   <wf:RichTextBox x:Name="txtMain" HideSelection="False" ReadOnly="True" Multiline="True"/>
</WindowsFormsHost>

RichTextBox下方是常规WPF TextBox

<TextBox x:Name="txtSend" TextWrapping="Wrap" AcceptsReturn="True"/>

我希望键盘焦点保持在TextBox,但仍允许用户选择WFH RichTextBox中的文字并滚动。

我已尝试更改MouseUptxtMain的键盘焦点,但是我无法滚动,并且无法使用Ctrl + C进行复制。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可能需要查看此sample。如果您想要多个焦点,则必须使用FocusScope

链接中的示例代码

static void OnGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    IInputElement focusedElement = e.NewFocus;
    for (DependencyObject d = focusedElement as DependencyObject; 
        d != null; d = VisualTreeHelper.GetParent(d)) {
        if (FocusManager.GetIsFocusScope(d)) {
            d.SetValue(FocusManager.FocusedElementProperty, focusedElement);
            if (!(bool)d.GetValue(IsEnhancedFocusScopeProperty)) {
                break;
            }
        }
    }
}