[英]Set Carret Position in RichTextBox C# WPF
我有一個Name = Editor
的RichTextBox
! 和以下代碼:
String textRich = new TextRange(Editor.Document.ContentStart, Editor.Document.ContentEnd).Text;
EditorColor ec = new EditorColor(textRich);//Transform The text in RTF Text
Stream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(ec.SetText())); //SetText Function return a RTF text
Editor.Selection.Select(Editor.Document.ContentStart, Editor.Document.ContentEnd);
Editor.Document.Blocks.Clear();
Editor.Selection.Load(stream, DataFormats.Rtf);//Change the text with the RTF Text
Editor.CaretPosition = ????
我想將Editor.CaretPosition
設置為選擇和更改文本之前的狀態嗎? 不能在這里工作:
TextPointer carret = Editor.CaretPosition;
do above code ......
Editor.CaretPosition = carret; // it sets the carret at end of Richtextbox
那么該怎么做呢?
如果您的純文本轉換為帶格式的文本,這應該可以工作:
// Save the current position
int caretIntPosition = GetIntPosition(Editor.CaretPosition, Editor);
// Do your work ...
// Restore the position
SetIntPosition(caretIntPosition, Editor);
/// <summary>
/// Converts a TextPointer position into an int position.
/// </summary>
int GetIntPosition(TextPointer pointerPosition, RichTextBox rtb)
{
int intPosition = 0;
TextPointer currentPosition = rtb.Document.ContentStart;
while (currentPosition.CompareTo(pointerPosition) != 0)
{
intPosition++;
currentPosition = currentPosition.GetNextInsertionPosition(LogicalDirection.Forward);
}
return intPosition;
}
/// <summary>
/// Converts an int position back into a TextPointer position and places the caret there.
/// </summary>
void SetIntPosition(int intPosition, RichTextBox rtb)
{
TextPointer currentPosition = rtb.Document.ContentStart;
for (int i = 1; i <= intPosition; i++)
{
currentPosition = currentPosition.GetNextInsertionPosition(LogicalDirection.Forward);
}
rtb.CaretPosition = currentPosition;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.