Bagaimana saya bisa menambahkan jeda baris ke teks ketika sedang ditetapkan sebagai atribut yaitu:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Membaginya ke dalam format yang meledak bukan pilihan untuk situasi khusus saya. Yang saya butuhkan adalah beberapa cara untuk meniru yang berikut ini:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Mungkin Anda dapat menggunakan atribut xml: space = "preserve" untuk melestarikan spasi putih di sumber XAML
sumber
xml:space="preserve"
juga akan menjaga ruang indentasi, yang biasanya ada di XAML. Jadi eksplisit<LineBreak />
seperti yang disarankan di atas tampaknya menjadi solusi yang lebih bersih.Ketika Anda perlu melakukannya dalam string (misalnya: di sumber daya Anda), Anda perlu menggunakan
xml:space="preserve"
dan kode karakter ampersand:Atau baris baru literal dalam teks:
Peringatan: jika Anda menulis kode seperti contoh kedua, Anda telah memasukkan baik baris baru, atau carriage return dan baris baru, tergantung pada akhir baris sistem operasi dan / atau editor teks digunakan. Misalnya, jika Anda menulis itu dan komit untuk git dari sistem linux, semuanya mungkin tampak baik - tetapi jika seseorang mengkloningnya ke Windows, git akan mengubah akhir baris Anda ke
\r\n
dan tergantung pada apa string Anda untuk ... Anda mungkin menghancurkan dunia.Sadarilah hal itu saat Anda mempertahankan spasi putih. Jika Anda menulis sesuatu seperti ini:
Anda sebenarnya telah menambahkan empat jeda baris, mungkin empat carriage-return, dan berpotensi tertinggal di ruang putih yang tidak terlihat ...
sumber
xml:space="preserve"
atributnyaResourceDictionary
juga, sehingga Anda tidak perlu menerapkannya ke setiap string sumber daya.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(dengan jeda baris antara baris Pertama dan baris Kedua)xml:space="preserve"
Anda hanya perlu menghapus
<TextBlock.Text>
dan hanya menambahkan konten Anda sebagai berikut:sumber
Perhatikan bahwa untuk melakukan ini, Anda perlu melakukannya dalam atribut Teks Anda tidak dapat menggunakan konten seperti
sumber
Mungkin seseorang lebih suka
dengan
xmlns:s="clr-namespace:System;assembly=mscorlib"
.sumber
Bagi mereka yang telah mencoba setiap jawaban untuk pertanyaan ini dan masih menggaruk-garuk kepala mengapa tidak ada yang bekerja untuk Anda, Anda mungkin telah berlari ke dalam bentuk masalah yang saya temui.
TextBlock.Text
Properti saya ada di dalamToolTipService.ToolTip
elemen dan itu databound ke properti objek yang datanya ditarik dari prosedur tersimpan SQL. Sekarang data dari properti khusus ini dalam prosedur tersimpan diambil dari fungsi SQL.Karena tidak ada yang berhasil untuk saya, saya berhenti mencari dan membuat kelas konverter di bawah:
Saya akhirnya harus menggunakan
Enivornment.NewLine
metode dari jawaban @ dparker . Saya menginstruksikan konverter untuk mencari kemungkinan representasi tekstual dari baris baru dan menggantinya denganEnvironment.NewLine
.Ini berhasil!
Namun, saya masih bingung mengapa tidak ada metode lain yang bekerja dengan properti databound.
Saya meninggalkan komentar pada jawaban yang diterima @ BobKing :
Dia menjawab dengan:
Bola lampu meledak!
Saya masuk ke fungsi SQL saya, menggantikan representasi tekstual dari baris baru dengan ...
... menghapus konverter dari
TextBlock.Text
ikatan saya , dan begitu saja ... itu berhasil!sumber
Saya telah menemukan ini membantu, tetapi mengalami beberapa kesalahan ketika menambahkannya ke tag "Content = ..." di XAML.
Saya memiliki beberapa baris dalam konten, dan kemudian menemukan bahwa konten itu tetap kosong meskipun saya tidak menentukannya. jadi untuk menyiasatinya dan membiarkannya "mengabaikan" spasi putih, saya menerapkan seperti ini.
Semoga ini bisa membantu orang lain.
(Outputnya adalah memiliki tiga baris teks dengan baris kosong di antara masing-masing.)
sumber
Saya menyadari ini ada pada pertanyaan lama tetapi hanya ingin menambahkan itu
juga berfungsi jika melakukan ini melalui kode.
sumber
bukan hal yang penting untuk diketahui tetapi apa yang Anda tentukan di antara tag TextBlock disebut konten inline dan masuk ke properti TextBlock.Inlines yang merupakan InlineCollection dan berisi item bertipe Inline. Subclass dari Inline adalah Run dan LineBreak, antara lain. lihat TextBlock.Inlines
sumber
Juga tidak berfungsi
Bukan masalah besar, hanya perlu digunakan
sebagai gantinya.
sumber
sumber
Kode di balik solusi
sumber