【问题标题】:Show selection in WPF RichTextBox in ElementHost after losing focus失去焦点后在 ElementHost 的 WPF RichTextBox 中显示选择
【发布时间】:2011-10-09 10:18:14
【问题描述】:

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

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

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

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

我还尝试了一些在失去/获得焦点时设置/重置选择背景颜色的方法,但这似乎很不合时宜,要使其可靠工作需要付出很多努力。

有人知道如何实现吗?

谢谢!

【问题讨论】:

    标签: c# wpf focus richtextbox selection


    【解决方案1】:

    我找到了解决办法:

    将第二个 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 控件中做任何您想做的事情。

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

    编辑: 您可以从表单中捕获 Deactivate 事件并关注 yourRichTextBox,然后关注 invisivleRichTextBox。所以你直接离开你的表格。

    【讨论】:

    • 到目前为止,您的解决方案似乎运行良好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多