Ich rufe Text aus einer XML-Datei ab und möchte einige neue Zeilen einfügen, die vom Textblock-Rendering als neue Zeilen interpretiert werden.
Ich habe es versucht:
<data>Foo bar baz \n baz bar</data>
Die Daten werden jedoch weiterhin ohne die neue Zeile angezeigt. Ich setze den Inhalt von <data>
über die .Text
Eigenschaft über C #.
Was muss ich in das XML einfügen, damit die neue Zeile in der GUI gerendert wird?
Ich habe versucht, den Text in der XAML manuell so einzustellen:
<TextBlock Margin="0 15 0 0" Width="600">
There
is a new line.
</TextBlock>
Und obwohl das codierte Zeichen nicht in der GUI angezeigt wird, gibt es mir auch keine neue Zeile.
Antworten:
Sie können versuchen, eine neue Zeile in die Daten einzufügen:
Wenn dies nicht funktioniert, müssen Sie die Zeichenfolge möglicherweise manuell analysieren.
Wenn Sie direktes XAML benötigen, ist das übrigens einfach:
quelle
XmlSerializer
der Unterbrechungen deserialisieren , bleiben die Unterbrechungen erhalten. In Xaml brauchen Sie<LineBreak/>
.Der Vollständigkeit halber: Sie können dies auch tun:
x0A ist der maskierte hexadezimale Zeilenvorschub. Das Äquivalent von \ n
quelle
Sie können auch die Bindung verwenden
Und stellen Sie MyText folgendermaßen ein:
quelle
Sie müssen verwenden
Oder wenn Sie es vorziehen:
Achtung: Wenn Sie beide & 10 verwenden UND zur nächsten Zeile in Ihrem Text gehen, haben Sie ZWEI leere Zeilen.
Hier für Details: http://msdn.microsoft.com/en-us/library/ms788746.aspx
quelle
Obwohl dies eine alte Frage ist, bin ich gerade auf das Problem gestoßen und habe es anders gelöst als die gegebenen Antworten. Vielleicht könnte es für andere hilfreich sein.
Ich bemerkte, dass meine XML-Dateien wie folgt aussahen:
Als es in meinen C # -Code eingelesen wurde, hatte die Zeichenfolge doppelte Backslashes.
Um dies zu beheben, habe ich einen ValueConverter geschrieben, um den zusätzlichen Backslash zu entfernen.
quelle
TextWrapping="Wrap"
(undAcceptsReturn="True"
wenn dies eine TextBox wäre) in der XAML auf dem TextBlock hatten Sie es richtig, und dies sollte die Antwort sein - aber sagen Sie einfach, dass Sie.Replace()
den Wert aus der Datenbank verwenden müssen - keine Notwendigkeit für a Ausgefallene Funktion:valueAsString = valueAsString.Replace("\\r\\n", "\r\n");
Jeder Wert, der mit der Eingabetaste eingegeben wird, wird problemlos in die Datenbank geschrieben. C # greift darauf zu, um den Wert anzuzeigen, den Probleme verursachen, wie Sie bemerkt haben. Dies müsste also als Onload des Textes bezeichnet werden.Wenn alles andere fehlschlägt, können Sie auch verwenden
quelle
quelle
Die Verwendung von System.Environment.NewLine ist die einzige Lösung, die für mich funktioniert hat. Als ich \ r \ n ausprobiert habe, wurde nur das tatsächliche \ r \ n im Textfeld wiederholt.
quelle
Sie müssen sicherstellen, dass für den Textblock diese Option aktiviert ist:
quelle
Fügen Sie einen "Zeilenumbruch" oder einen "Absatzumbruch" wie folgt in eine RichTextBox "rtb" ein:
Die einzige Möglichkeit, die NewLine-Elemente abzurufen, besteht darin, zuerst Text mit "\ r \ n" -Elementen einzufügen und dann mehr Code anzuwenden, der für Auswahl- und / oder TextRange-Objekte funktioniert. Dadurch wird sichergestellt, dass die \ par-Elemente in \ Werbebuchungen konvertiert werden, wie gewünscht gespeichert werden und beim erneuten Öffnen der * .Rtf-Datei weiterhin korrekt sind. Das habe ich bisher nach harten Versuchen gefunden. Meine drei Codezeilen müssen von mehr Code (mit Schleifen) umgeben sein, um die TextPointer-Elemente (.Start .End .ContentStart .ContentEnd) dort festzulegen, wo die Zeilen und Unterbrechungen abgelegt werden sollen, was ich für meine Zwecke mit Erfolg getan habe.
quelle