在将我的RichTextBox文本设置为字符串T之后,RichTextBox中的插入符号位置将“丢失”(它将转到其开始位置)。以下是我正在做的尝试在“丢失”后“恢复”它:如何“恢复”Wpf RichTextBox中的插入位置?
public static int GetCaretIndex(RichTextBox C)
{
return new TextRange(C.Document.ContentStart, C.CaretPosition).Text.Length;
}
...
int CaretIndex = GetCaretIndex(C); // Get the Caret position before setting the text of the RichTextBox
new TextRange(C.Document.ContentStart, C.Document.ContentEnd).Text = T; // Set the text of the RichTextBox
C.CaretPosition = C.Document.ContentStart.GetPositionAtOffset(CaretIndex, LogicalDirection.Forward); // Set the Caret Position based on the "Caret Index" variable
但是,此代码不起作用。 “恢复的”插入符号与“原始”符号位于不同的位置(出于某种原因,始终位于“原始”之后)。
将RichTextBox的CaretPosition“保存”为TextPointer似乎也不起作用。
任何人都可以提供另一种“恢复”插入符号的方法,或修复上述代码的方法吗?
您检索索引并设置位置。根据文件,他们是不一样的。尝试保存脱字符位置而不是脱字符索引。你似乎正在取代整个内容 - 如果有新文本,恢复脱字符的意义何在?尤其是,如果脱字号在接近尾声时会发生什么,并且新文本更短? – dlatikay
@dlatikay尝试将CaretPosition另存为TextPointer,使“已恢复”指针转到RichTextBox的起始位置。我正在替换撤销/重做系统的全部内容(请参阅:https://stackoverflow.com/questions/15772602/how-to-undo-and-redo-in-c-sharp-rich-text-box) 。回答你的第二个问题,似乎没有什么“不同”的事情发生,脱字符只是在“原始”插入符号处跳到段落,或者返回几个字符。 – Polygons