2017-05-28 95 views
2

在将我的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似乎也不起作用。

任何人都可以提供另一种“恢复”插入符号的方法,或修复上述代码的方法吗?

+0

您检索索引并设置位置。根据文件,他们是不一样的。尝试保存脱字符位置而不是脱字符索引。你似乎正在取代整个内容 - 如果有新文本,恢复脱字符的意义何在?尤其是,如果脱字号在接近尾声时会发生什么,并且新文本更短? – dlatikay

+0

@dlatikay尝试将CaretPosition另存为TextPointer,使“已恢复”指针转到RichTextBox的起始位置。我正在替换撤销/重做系统的全部内容(请参阅:https://stackoverflow.com/questions/15772602/how-to-undo-and-redo-in-c-sharp-rich-text-box) 。回答你的第二个问题,似乎没有什么“不同”的事情发生,脱字符只是在“原始”插入符号处跳到段落,或者返回几个字符。 – Polygons

回答

2

似乎工作(对我来说): C.CaretPosition = C.Document.ContentStart; C.CaretPosition = C.CaretPosition.GetPositionAtOffset(CaretIndex, LogicalDirection.Forward);

(我讨厌的RichTextBox的方式。)

+1

(出于某种奇怪的原因)“效果更好”。当新文本改变文本大小时仍然有些麻烦,但是我确信有些玩家可以让它工作(只要我得到它就会在这里发布)。 “_我讨厌RichTextBox的方式。” - 你不是唯一的。 – Polygons

相关问题