2016-11-20 67 views
8

因此,我有一个RichTextBox(如下所示),它具有等宽字体,并且每行上必须具有相同数量的字符。这样做需要在输入框的字符串中的每个x字符后面插入一个\n换行符。使用TextPointers选择时不要突出显示换行符

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

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

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

编辑:一个可以接受的选择是使换行不必要。如在,以某种方式修复RichTextBox,以便它每行上总是有12个字符,但这不是理想的,因为我想保持调整窗口的大小很容易。

更新:似乎减少XAML中的文本列的宽度减少了突出边缘的大小,但并未完全消除。我不能减少宽度而不会导致文字换行。

Example of Problem

+0

我看到一个主要问题,这些新线(回车):你怎么知道某个特定回车是有限制输出长度,你需要跨越的选择下一个行,还是只是文本的一部分的回车,在这种情况下,您可能不会突出显示? –

+0

在将文本装入文本框之前,是否将原始文本中的回车符和换行符分开? –

+0

不,没有。原文是一个连续的字符串。我每12个字符附加一个'\ r'。 – Airhead

回答

4

我已经想通了,这个问题没有具体涉及到\n字符。

我还不能完全确定什么原因引起的,但我固定它是这样的:

玩耍,并注意到,改变列的宽度,对坏的高亮区域的宽度的效果后,我试图减少它。问题是,这导致文字换行。

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

我需要一种方法来达到禁用WordWrap的效果,所以在做了一些阅读后,我发现我可以将FlowDocumentWidth属性设置为非常大的数字,以便文本永远不会换行。即使要做到这一点,我也必须去禁用滚动条。

那么,我已经禁用了wordwrap的效果,并且我能够继续减小RichTextBox的宽度,直到不良空间不可见为止(如果没有消失)。

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

+0

Windows的行结束符为'\ r \ n',而不是'\ r'而不是'\ n',您应该使用'Environment.NewLine'来打破这个词。没有人讨厌你,你从没有创造任何问题 – VMAtm

+0

我可以证实,如果我同时使用这两个字符,问题仍然存在。那是我最初使用的。 – Airhead

-1

你可以尝试用'\ n'来分割单词吗?然后遍历每个拆分并将其传递给RichTextBox.Selection.Select()。

类似的东西来this