使用TextPointers

时间:2016-11-20 20:02:21

标签: c# wpf newline richtextbox highlight

所以,我有一个RichTextBox(如下所示),它有一个等宽字体,每行必须有相同数量的字符。这样做需要在为该框提供的字符串中的每个\n字符后插入x换行符。

我还有一个算法,允许光标在按下箭头键的同时移动,在移动时选择单个字符。当光标覆盖框中的单词时,它应突出显示整个单词。

问题:当一个单词跨越多行时,第一行的最后一个字符后面有一个空格,我认为这是由\n字符引起的。

如何让RichTextBox.Selection.Select()不突出显示这些空格?我可以在解析等时删除字符的选择,但我需要能够不突出显示此空白空间。

编辑:一个可接受的替代方案是使换行符不成功。就像在某种程度上修复RichTextBox所以它在每一行总是有12个字符,但这并不理想,因为我希望能够轻松调整窗口大小。

更新:似乎减少XAML中文本列的宽度已经减少了超出边缘的高亮显示的大小,但还没有完全消除它。在不导致文本换行的情况下,我无法再减小宽度。

Example of Problem

2 个答案:

答案 0 :(得分:6)

我已经发现问题与\n字符没有特别关系。

我还不完全确定导致它的原因,但我修复了这个问题:

在玩完并注意到改变列的宽度会对坏突出显示区域的宽度产生影响后,我尝试将其减少。问题是,这导致文本换行。

所以我想,好吧,我只是为RichTextBox禁用WordWrap,对吧?错误。 WPF不允许我们禁用此功能。

我需要一种方法来实现禁用WordWrap的效果,所以在做了一些阅读后,我发现我可以将FlowDocument的{​​{1}}属性设置为非常大的数字,所以文本永远不会包装。即使这样做,我也不得不去禁用滚动条。

那么,我得到了wordwrap禁用的效果,我能够继续减小Width的宽度,直到坏空间不可见,如果没有消失。

所以,问题解决了,但我还有一个问题:为什么微软恨我?

答案 1 :(得分:-1)

您是否可以尝试将该单词拆分为' \ n'。然后循环遍历每个拆分并将其传递给RichTextBox.Selection.Select()。

类似于this

的内容