Ich habe eine WPF RichTextBox, in die ich etwas Text eintippe und dann den gesamten Text analysiere, um die Bearbeitung durchzuführen. Während dieses Parsens habe ich die absoluten Zeichenpositionen von Anfang und Ende jedes Wortes.
Ich möchte diese Zeichenpositionen verwenden, um bestimmte Wörter zu formatieren. Ich habe jedoch festgestellt, dass das FlowDocument TextPointer-Instanzen verwendet, um Positionen im Dokument zu markieren.
Ich habe festgestellt, dass ich einen TextRange erstellen kann, indem ich ihn mit Start- und Endzeigern konstruiere. Sobald ich den TextRange habe, kann ich leicht Formatierung auf den Text darin anwenden. Ich habe GetPositionAtOffset verwendet, um einen TextPointer für meinen Zeichenoffset zu erhalten, aber ich vermute, dass sein Offset sich von meinem unterscheidet, weil der ausgewählte Text sich in einer etwas anderen Position als erwartet befindet.
Meine Frage ist, wie kann ich eine absolute Zeichenposition genau in einen TextPointer umwandeln?
Ich habe keine zuverlässige Methode gefunden, absolute Zeichenpositionen in TextPosition-Instanzen zu konvertieren.
Meine alternative Lösung bestand darin, die ursprüngliche Analyse so zu ändern, dass sie an einzelnen Läufen arbeitet, anstatt den gesamten Text der RichTextBox zu erfassen. Das Arbeiten mit Zeichenpositionen, die relativ zu einer bestimmten Run-Instanz sind, hat sich für mich als zuverlässig erwiesen. Ich denke, dass es mir geholfen hat, meine Denkweise stärker auf die Denkweise von WPF zu übertragen.
Ich habe den folgenden Ansatz zum Navigieren von Läufen im FlowDocument verwendet (inspiriert von Ссылка ):
%Vor%Ich hatte dieses Problem und endete mit der folgenden RichTextBox-Erweiterungsmethode. In meinem Kontext funktioniert es einwandfrei!
%Vor%Ich hatte genau das gleiche Problem, ich fand heraus, dass es einen Fehler in RichTextBox gibt, weil "neue Zeilenzeichen - \ r \ n" nicht gezählt werden. Wenn Ihre Zeilennummern zunehmen, werden Sie feststellen, dass Ihr Offset positioniert ist Falsch nach Zeilenanzahl, und ich hatte meine Probleme gelöst, indem ich die Zeilennummer vom Offset absetzte.
Tags und Links wpf .net c# flowdocument richtextbox