如何让WPF中窗体失去焦点后TextBox中的被选中文本仍然保持高亮状态?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让WPF中窗体失去焦点后TextBox中的被选中文本仍然保持高亮状态?相关的知识,希望对你有一定的参考价值。

就像windows下的记事本程序,即使窗体不具有焦点,被选中的文字还是会反色并且有蓝色的背景色
WPF下如何实现?类似下图

参考技术A

在操作的地方加上这句richTextBox.Focus();就可以了!

我是直接加在了TextChanged函数里。

private void richTextBox_TextChanged(object sender, TextChangedEventArgs e)

      richTextBox.Focus();

参考技术B 最近也在研究这个,今天终于找到了,就是textbox里面的一个属性 HideSelection “指示当前编辑控件失去焦点时,应隐藏选定内容”默认是true,改成false 即可
(环境是vs2010 C#)
参考技术C 给你写个例子
用除法器
当鼠标移到文字上时候改变颜色
<TextBlock Text="TestColor" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
参考技术D 我提供的思路是:在window的lostfocus事件中,遍历窗体中的textbox控件。然后获取textbox的seletion内容,即选中的内容。然后在事件中对textbox做重选的操作。追问

重选操作是什么?重新select?
重选select没用,因为它只是不显示出选中文本的状态

或者您说的是其他的操作?

追答

不好意思,我发现一个问题。就是你给textbox加上SelectionChanged后你会发现一个现象。
如果你在窗体的textbox里有了选中的文本,然后让窗体失去焦点。此时textbox失去原先高亮的部分。但后台没进入SelectionChanged事件。如果窗体再次得到焦点后。textbox还是会恢复原先高亮的部分的。

追问

是啊,就是我所说的这个问题,窗体失去焦点的时候textbox仍然是选中了原来的文本,但是它不会有显示出来,我只是想让它在窗体没有焦点的时候仍然能显示高亮。。。

追答

没想出办法,不好意思。可能控件的逻辑就是这样——即失去窗体焦点时,窗体内控件都失去焦点且失去选中情况。

第5个回答  2013-08-01 我以前用过一个第三方的TextBox,有这个设置,微软的好像没有,你可以考虑用第三方的(可能付费),也可以自己重写(比较麻烦)。

以上是关于如何让WPF中窗体失去焦点后TextBox中的被选中文本仍然保持高亮状态?的主要内容,如果未能解决你的问题,请参考以下文章

WPF虚拟键盘如何不获得当前焦点

C++ Builder中如何让窗体一直显示最前,焦点不失去,就是点不了别的窗体,切换不了窗体,总处在被激活状态

WPF强制设置TextBox的焦点

C# Winform 控件或窗体失去焦点时,获取键盘输入数据(我用winform获取另一个窗口的数据)

vba textbox在失去焦点后如何重新获取焦点

如何通过vba的方式让文本框失去焦点以后自动显示成日期式样?