【发布时间】:2017-05-28 21:08:47
【问题描述】:
在将我的 RichTextBox 的文本设置为字符串 T 后,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 尝试将 CaretPosition 保存为 TextPointer 会使“恢复的”指针指向 RichTextBox 的开头。我正在为撤消/重做系统替换整个内容(请参阅:stackoverflow.com/questions/15772602/…)。要回答您的第二个问题,似乎没有任何“不同”发生,插入符号只是转到“原始”插入符号行上方的段落,或者返回几个字符。
标签: c# .net wpf richtextbox caret