gpt4 book ai didi

c# - 使用 RichEditBox 格式化富文本

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:05 25 4
gpt4 key购买 nike

我将 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 控件的滚动位置?或者如何在不影响滚动位置的情况下修改文本颜色?

最佳答案

这似乎是设计使然。当我们在RichEditBox中设置光标时,我们就可以滚动看不到光标的文本。我们使用SetRange方法后,它会滚动到我们设置光标的位置。如果光标在 View 中,则不会滚动。

如果您想滚动到您设置的文本范围,您应该能够将 PointOptions.Start 设置为 ScrollIntoView方法。它会将文本范围的末尾滚动到 View 中。

例如:

ITextSelection selection = MyRichEditBox.Document.Selection;
int originalStartPosition = selection.StartPosition;
int originalEndPosition = selection.EndPosition;
selection.SetRange(600, 610);
selection.CharacterFormat.ForegroundColor = Colors.Red;
selection.SetRange(originalStartPosition, originalEndPosition);
selection.ScrollIntoView(PointOptions.Start);

编辑代码:

ITextSelection selection = MyRichEditBox.Document.Selection;
int originalStartPosition = selection.StartPosition;
int originalEndPosition = selection.EndPosition;
selection.SetRange(600, 610);
selection.ScrollIntoView(PointOptions.Start);
await Task.Delay(2000);
selection.CharacterFormat.ForegroundColor = Colors.Red;
selection.SetRange(originalStartPosition, originalEndPosition);

关于c# - 使用 RichEditBox 格式化富文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42909162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com