在失去焦点后,在ElementHost的WPF RichTextBox中显示选择
本文关键字:RichTextBox 显示 选择 WPF ElementHost 失去 焦点 | 更新日期: 2023-09-27 18:02:47
我目前正在开发一个windows窗体应用程序(基本上是一个文档编辑器)与WPF RichTextBox。当然,因为所有其余的是一个windows窗体应用程序,我托管WPF RichTextBox在一个元素thost。
问题是,我想保持在RichTextBox可见的选择,即使它没有焦点。例如,我在工具栏中有几个文本格式按钮(粗体,斜体,…),当我按下其中一个时,我目前无法再看到选择,因为RichTextBox失去了焦点。
不幸的是,RichTextBox没有像一些WinForms控件那样的hidesselection属性。
我已经尝试取消LostFocus事件描述在其他帖子。然而,当RichTextBox在ElementHost内托管时,这似乎不起作用(我尝试过,它确实在仅wpf的项目中工作)。
当失去/获得焦点时,我也尝试了一点设置/重置选择背景颜色,但这看起来非常粗糙,要使其可靠地工作需要付出很多努力。
有谁知道这是如何实现的吗?
谢谢!
我找到了一个解决方案:
添加第二个RichTextBox到你的ElementHost(高度为0)。
在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-controls
只在焦点被设置为同一窗体的控件时才起作用——如果您直接从WPF-RichTextBox中离开parentform,它将失去选择高亮。(LostFocus-Event似乎没有被触发。)
编辑:您可以从表单捕获deactivate -事件,然后聚焦yourRichTextBox
,然后聚焦invisivleRichTextBox
。所以你可以直接离开你的表单