Wie kann ich dem Text einen Zeilenumbruch hinzufügen, wenn er als Attribut festgelegt wird?
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Es ist für meine spezielle Situation keine Option, es in das explodierte Format aufzuteilen. Was ich brauche, ist eine Möglichkeit, Folgendes zu emulieren:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Möglicherweise können Sie das Attribut xml: space = "bewahren" verwenden, um Leerzeichen in der Quell-XAML beizubehalten
quelle
xml:space="preserve"
auch die Einrückungsräume erhalten bleiben, die normalerweise in XAML vorhanden sind. Daher<LineBreak />
scheint ein expliziter wie oben vorgeschlagen eine sauberere Lösung zu sein.Wenn müssen Sie es in einer Zeichenfolge tun (zB: in Ihre Ressourcen) , die Sie verwenden müssen ,
xml:space="preserve"
und die Zeichen - Zeichen - Codes:Oder wörtliche Zeilenumbrüche im Text:
Warnung: Wenn Sie Code wie im zweiten Beispiel schreiben, haben Sie entweder eine neue Zeile oder einen Wagenrücklauf und eine neue Zeile eingefügt, je nachdem, welche Zeilenenden Ihr Betriebssystem und / oder Ihr Texteditor verwenden. Wenn Sie das beispielsweise schreiben und es von einem Linux-System an git übergeben, scheint alles in Ordnung zu sein - aber wenn jemand es auf Windows klont, konvertiert git Ihre Zeilenenden in
\r\n
und abhängig davon, wofür Ihre Zeichenfolge für ... Sie bestimmt ist könnte die Welt brechen.Seien Sie sich dessen bewusst, wenn Sie Leerzeichen beibehalten. Wenn Sie so etwas schreiben:
Sie haben tatsächlich vier Zeilenumbrüche hinzugefügt, möglicherweise vier Zeilenumbrüche und möglicherweise nachfolgende Leerzeichen, die unsichtbar sind ...
quelle
xml:space="preserve"
Attribut auch auf das anwendenResourceDictionary
, sodass Sie es nicht auf jede Ressourcenzeichenfolge anwenden müssen.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(mit einem Zeilenumbruch zwischen der ersten und der zweiten Zeile)xml:space="preserve"
Sie müssen lediglich
<TextBlock.Text>
Ihre Inhalte wie folgt entfernen und hinzufügen:quelle
Beachten Sie, dass Sie dies im Textattribut tun müssen, ohne den Inhalt wie verwenden zu können
quelle
Vielleicht bevorzugt jemand
mit
xmlns:s="clr-namespace:System;assembly=mscorlib"
.quelle
Für diejenigen, die jede Antwort auf diese Frage ausprobiert haben und sich immer noch am Kopf kratzen, warum keiner von ihnen für Sie arbeitet, sind Sie möglicherweise auf eine Form des Problems gestoßen, auf das ich gestoßen bin.
Meine
TextBlock.Text
Eigenschaft befand sich innerhalb einesToolTipService.ToolTip
Elements und war an eine Eigenschaft eines Objekts gebunden, dessen Daten aus einer gespeicherten SQL-Prozedur abgerufen wurden. Jetzt wurden die Daten von dieser bestimmten Eigenschaft innerhalb der gespeicherten Prozedur aus einer SQL-Funktion abgerufen.Da für mich nichts funktioniert hatte, gab ich meine Suche auf und erstellte die folgende Konverterklasse:
Am Ende musste ich die
Enivornment.NewLine
Methode aus der Antwort von @ dparker verwenden . Ich habe den Konverter angewiesen, nach einer möglichen Textdarstellung einer Newline zu suchen und diese durch zu ersetzenEnvironment.NewLine
.Das hat funktioniert!
Ich war jedoch immer noch ratlos darüber, warum keine der anderen Methoden mit datengebundenen Eigenschaften arbeitete.
Ich habe einen Kommentar zu @ BobKings akzeptierter Antwort hinterlassen :
Er antwortete mit:
Eine Glühbirne ging aus!
Ich ging in meine SQL-Funktion, ersetzte meine Textdarstellungen von Zeilenumbrüchen durch ...
... den Konverter von meiner
TextBlock.Text
Bindung entfernt und einfach so ... es hat funktioniert!quelle
Ich habe dies als hilfreich empfunden, bin jedoch beim Hinzufügen zu einem "Content = ..." - Tag in XAML auf einige Fehler gestoßen.
Ich hatte mehrere Zeilen im Inhalt und fand später heraus, dass der Inhalt Leerzeichen enthielt, obwohl ich das nicht spezifizierte. Um das zu umgehen und das Leerzeichen "ignorieren" zu lassen, habe ich so etwas implementiert.
hoffe, das hilft jemand anderem.
(Die Ausgabe enthält drei Textzeilen mit einer leeren Zeile dazwischen.)
quelle
Mir ist klar, dass dies eine ältere Frage ist, aber ich wollte das nur hinzufügen
funktioniert auch, wenn dies über Code erfolgt.
quelle
Es ist nicht wichtig zu wissen, aber was Sie zwischen den TextBlock-Tags angeben, wird als Inline-Inhalt bezeichnet und geht in die TextBlock.Inlines-Eigenschaft, die eine InlineCollection ist und Elemente vom Typ Inline enthält. Unterklassen von Inline sind unter anderem Run und LineBreak. siehe TextBlock.Inlines
quelle
Funktioniert auch nicht mit
Keine große Sache, nur nötig
stattdessen.
quelle
quelle
Code hinter der Lösung
quelle