C# 失去焦点后在ElementHost的WPF RichTextBox中显示所选内容
我目前正在开发一个带有WPF RichTextBox的windows窗体应用程序(基本上是一个文档编辑器)。当然,由于其余的都是windows窗体应用程序,我将WPF RichTextBox托管在ElementHost中 问题是我想让RichTextBox中的选择保持可见,即使它没有焦点。例如,我在工具栏中有几个文本格式按钮(粗体、斜体等),当我按下其中一个按钮时,我当前无法再看到所选内容,因为RichTextBox失去焦点 不幸的是,RichTextBox不像某些WinForms控件那样具有HideSelection属性 我已经尝试过取消LostFocus事件,如其他帖子所述。但是,当RichTextBox托管在ElementHost中时,这似乎不起作用(我尝试过,但它确实在仅WPF的项目中起作用) 我还尝试过在失去/获得焦点时设置/重置选择背景色,但这似乎非常粗糙,要使其可靠工作需要付出很多努力 有人知道如何实现这一目标吗 谢谢大家! 我找到了一个解决方案: 将第二个RichTextBox添加到ElementHost(高度为0)。C# 失去焦点后在ElementHost的WPF RichTextBox中显示所选内容,c#,wpf,focus,richtextbox,selection,C#,Wpf,Focus,Richtextbox,Selection,我目前正在开发一个带有WPF RichTextBox的windows窗体应用程序(基本上是一个文档编辑器)。当然,由于其余的都是windows窗体应用程序,我将WPF RichTextBox托管在ElementHost中 问题是我想让RichTextBox中的选择保持可见,即使它没有焦点。例如,我在工具栏中有几个文本格式按钮(粗体、斜体等),当我按下其中一个按钮时,我当前无法再看到所选内容,因为RichTextBox失去焦点 不幸的是,RichTextBox不像某些WinForms控件那样具有H
在RichTextBox的LostFocus中执行以下操作:
bool firstLost = true;
void yourRichTextBox_LostFocus(object sender, RoutedEventArgs e)
{
e.Handled = true;
if (firstLost)
{
yourRichTextBox.Focus();
firstLost = false;
}
else
{
firstLost = true;
}
invisibleRichTextBox.Focus();
}
因此,它获得焦点,将其提供给不可见的RichTextBox(因此e.Handled=true;
工作正常),然后您可以在WinForms控件中执行任何操作
仅起作用焦点设置为同一窗体的控件-如果直接从WPF RichTextBox离开父窗体,则会丢失选择突出显示。(LostFocus事件似乎未引发。)
编辑:
您可以从表单捕获停用事件,然后聚焦
yourRichTextBox
,然后聚焦invisivleRichTextBox
。因此,您可以直接离开表单。到目前为止,您的解决方案似乎运行良好。非常感谢你!