加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在WPF文本框中选择多个文本段?

发布时间:2020-12-15 03:54:24 所属栏目:百科 来源:网络整理
导读:是否可以在 WPF文本框中选择文本的多个部分?例如,对于包含字符串“这是测试”的文本框,我想要能够突出显示此,然后按住Ctrl并突出显示TEST,而不取消选择. 关于我正在瞄准的视觉线索,请参阅关于Firefox功能的this文章. 如果默认情况下没有办法完成这个,我想知
是否可以在 WPF文本框中选择文本的多个部分?例如,对于包含字符串“这是测试”的文本框,我想要能够突出显示此,然后按住Ctrl并突出显示TEST,而不取消选择.

关于我正在瞄准的视觉线索,请参阅关于Firefox功能的this文章.

如果默认情况下没有办法完成这个,我想知道是否有WPF中实现的任何第三方控件.

解决方法

WPF的TextBox和RichTextBox类不直接支持多重选择,但是与WPF的大部分部分一样,很容易自定义现有的RichTextBox以获得这种能力.

步骤是:

>创建一个派生自RichTextBox的类
>添加类型为ObservableCollection< TextRange>的“AdditionalRanges”属性它将包含除当前TextSelection之外的所有选定范围
> Override OnPreviewMouseLeftButtonDown:如果按住Ctrl键,将当前TextSelection组合到“AdditionalRanges”属性中并清除Selection,否则清除“AdditionalRanges”.
>在构造函数中,将一个CollectionChanged处理程序添加到使用TextRange.ApplyPropertyValue()的“AdditionalRanges”中,使集合中的添加范围显示为高亮,并且删除的范围正常显示.

在实现中,为了方便起见,我还建议您实施更多的属性:

>将TextSelection与AdditionalRanges相结合的“AllRanges”属性
>一个可绑定的“文本”属性
>一个可绑定的“SelectedText”属性

这些都是非常微不足道的.

最后说明:

>更新AdditionalRanges或计算AllRanges时,如果TextSelection与现有AdditionalRange重叠,则将其替换为组合范围,否则将TextSelection添加到列表中.>您可以添加一个TextChanged处理程序,以便知道何时更新“Text”属性,以及一个PropertyChangedCallback来知道何时更新FlowDocument

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读