Wie verschiebe ich das Caret um eine bestimmte Anzahl von Positionen in einer WPF RichTextBox?

8

Ich möchte den Caret um 4 Positionen nach rechts verschieben, wo mein Caret momentan ist. Ich bin für PreviewKeyDown registriert und rufe InsertTextInRun() auf, wenn der Tab-Schlüssel erfasst wird, wie folgt:

%Vor%

Das Problem besteht darin, dass der Caret nach dem Aufruf von InsertTextInRun() beibehalten wird. Es bewegt sich nicht zum Ende des neuen Textes, was das gewünschte Verhalten ist. Wie würde ich das tun?

Nebenbei - ja, ich weiß über die Eigenschaft AcceptsTab in RichTextBox . Ich wähle es zu ignorieren und rolle meine eigene Tab-Funktionalität, weil das Tabbing mit AcceptsTab einen unangenehmen Nebeneffekt hat, Text in nachfolgenden Zeilen einzurücken, was nicht ist, was ich will.

    
Rob Ringham 23.03.2010, 02:53
quelle

3 Antworten

8

Ich bin gerade auf dasselbe Problem gestoßen. Es scheint, dass die letzte Caret-Position davon abhängt, auf welche Weise sie sich direkt vor dem Einfügen bewegte.

Der folgende Code stellt sicher (3.5sp1), dass nach dem Einfügen der Cursor rechts neben dem eingefügten Text steht:

%Vor%

Beachten Sie, dass die LogicalDirection-Eigenschaft von caret dadurch geändert werden kann (und muss). es reicht nicht aus, einfach den richtigen TextPointer zu erstellen.

    
DK. 26.05.2010, 20:51
quelle
1

Verwenden Sie die Methode GetInsertionPosition () auf der CaretPosition TextPointer. Dadurch können Sie den Text vor dem Einfügen einfügen.

%Vor%     
Tarsier 23.03.2010 13:39
quelle
1

Um zu testen, könnten Sie versuchen, die Bewegung selbst zu erzwingen:

%Vor%

Wenn das funktioniert, müssen Sie wahrscheinlich zusätzliche Logik für Situationen implementieren, in denen die Registerkarte nicht am Ende des Inhalts liegt.

    
Pakman 17.08.2010 15:30
quelle

Tags und Links