【发布时间】:2017-03-22 10:03:47
【问题描述】:
我将 RichEditBox 用于富文本编辑器:当用户在 richEditBox 控件中键入文本时,我对文本中的不同关键字使用不同的颜色。
在进行更改之前,我会保存当前选择位置:
ITextSelection selection = richEditBox.Document.Selection;
int originalStartPosition = selection.StartPosition;
int originalEndPosition = selection.EndPosition;
然后我改变部分文本的颜色,例如:
selection.SetRange(startIndex, stopIndex);
selection.CharacterFormat.ForegroundColor = Colors.Red;
在进行所有更改后,我恢复当前选择位置:
selection.SetRange(originalStartPosition, originalEndPosition);
这很好用,但是 SetRange() 函数会影响 richEditBox 中文本的滚动位置,因为它会自动滚动以使选定的文本部分在屏幕上可见。因此,在所有颜色修改之后,richEditBox 控件的滚动位置也被修改了。
最终的 SetRange() 函数调用将光标置于其初始位置,而不是滚动位置。
所以,我的问题是:如何在更改颜色后恢复 richEditBox 控件的滚动位置?或者如何在不影响滚动位置的情况下修改文本颜色?
【问题讨论】:
-
这很奇怪,因为您是说第一个“SetRange”滚动,但第二个没有滚动 - 或者您的意思是,第二个范围仍在视图中?然后你可以看看这个:stackoverflow.com/questions/626988/… 因为随着时间的推移,再次向上滚动变得非常难看。
-
SetRange() 函数不会滚动到初始位置,而只是为了使选择在屏幕上可见。
-
那么我只想参考已经回答的另一个问题,我写了一个链接。我想隐藏选择应该可以解决问题。
-
感谢您的链接,但我正在制作 UWP 应用程序,因此您提到的方法不适合。这应该以更简单的方式完成,或者根本不可能完成。
-
对不起,我忽略了 uwp 标签。但是,如果您确定链接中的其他方法不起作用,我认为没有简单的解决方案。反正我对 uwp 不是很熟悉,所以我可能是错的。