我目前正在使用WPF RichTextBox开发一个Windows窗体应用程序(基本上是一个文档编辑器)。当然,由于所有其余的都是一个Windows窗体应用程序,我在一个ElementHost中托管WPF RichTextBox。
问题是我希望RichTextBox中的选择保持可见,即使它没有焦点。例如,我在工具栏中有几个文本格式按钮(粗体,斜体,...),当我按下其中一个按钮时,我目前无法看到选择,因为RichTextBox失去了焦点。
不幸的是,RichTextBox没有像某些WinForms控件那样的HideSelection属性。
我已尝试取消其他帖子中描述的LostFocus事件。但是,当RichTextBox托管在ElementHost中时,这似乎不起作用(我试过,它确实在仅WPF项目中工作)。
我还在失去/获得焦点时设置/重置选择背景颜色进行了一些实验,但这看起来非常糟糕,并且努力使其可靠地工作。
有谁知道如何实现这一目标?
谢谢!
答案 0 :(得分:0)
我找到了解决方案:
向ElementHost添加第二个RichTextBox(高度为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();
}
因此它获得了Focus,将它提供给不可见的RichTextBox(因此e.Handled = true;
工作正常)然后你可以在你的WinForms控件中做任何你想做的事。
仅在焦点设置为同一表单的控件时才起作用 - 如果直接从WPF-RichTextBox中保留父表单,则会丢失选择突出显示。 (LostFocus-Event似乎没有被提出。)
编辑:
您可以从表单中捕获Deactivate事件并关注yourRichTextBox
,然后关注invisivleRichTextBox
。所以你直接离开你的表格。