簡體   English   中英

在RichTextBox C#WPF中設置Carret位置

[英]Set Carret Position in RichTextBox C# WPF

我有一個Name = EditorRichTextBox 和以下代碼:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM