gpt4 book ai didi

c# - 失去焦点后在 ElementHost 的 WPF RichTextBox 中显示选择

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:14 25 4
gpt4 key购买 nike

我目前正在开发一个带有 WPF RichTextBox 的 Windows 窗体应用程序(基本上是一个文档编辑器)。当然,由于其余所有都是 Windows 窗体应用程序,我将 WPF RichTextBox 托管在 ElementHost 中。

问题是我想让 RichTextBox 中的选择保持可见,即使它没有焦点。例如,我在工具栏中有几个文本格式按钮(粗体、斜体……),当我按下其中一个按钮时,我目前无法再看到选择,因为 RichTextBox 失去了焦点。

不幸的是,RichTextBox 没有像某些 WinForms 控件那样的 HideSelection 属性。

我已经按照其他帖子中的描述尝试取消 LostFocus 事件。但是,当 RichTextBox 托管在 ElementHost 中时,这似乎不起作用(我尝试过并且它确实在仅限 WPF 的项目中起作用)。

我还尝试了一些在失去/获得焦点时设置/重置选择背景颜色,但这看起来很老套,要使其可靠地工作需要付出很多努力。

有人知道如何实现吗?

谢谢!

最佳答案

我找到了一个解决方案:

向您的 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();
}

因此它获得焦点,将其提供给不可见的 RichTextBox(因此 e.Handled = true; 正常工作)然后您可以在 WinForms 控件中做任何您想做的事情。

仅在焦点设置为相同表单的控件时有效——如果您直接从 WPF-RichTextBox 中离开父表单,它会失去选择突出显示。 (LostFocus-Event 似乎没有被引发。)

编辑:您可以从表单中捕获停用事件并聚焦 yourRichTextBox,然后聚焦 invisivleRichTextBox。所以你可以直接留下你的表格。

关于c# - 失去焦点后在 ElementHost 的 WPF RichTextBox 中显示选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com