WPF Textblock, linebreak dalam atribut Teks

96

Apakah ada cara untuk \nmembuat pemutusan baris di a TextBlock?

<TextBlock Text="line1\nLine2" />

Atau apakah ada cara yang lebih baik untuk memaksa pemutusan garis tengah, di dalam Textatribut?

<LineBreak />

Ini tidak berfungsi untuk saya, ini harus berupa nilai Textatribut, karena string teks disetel dari sumber luar.

Saya kenal LineBreaktetapi itu bukan jawaban yang saya cari.

ScottCate
sumber
2
di xaml Anda harus menggunakan karakter kontrol <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, jika Anda ingin menggunakan \ n karakter itu hanya bekerja dari kode di belakang txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire
& # 10; bekerja dengan baik di xaml. Terima kasih JJ_Coder4Hire!
Kay Lee

Jawaban:

116

Saya tahu ini membangkitkan kembali pertanyaan lama, tetapi saya memiliki masalah yang sama. Solusi bagi saya adalah menggunakan feed baris yang dikodekan HTML ( &amp;#10;).

Line1&amp;#10;Line2

Seperti

Baris1
Baris2

Untuk mengetahui lebih banyak karakter yang dikodekan HTML, lihat w3schools

Noaki
sumber
19
@Knbax jika teks ditentukan sebagai konten antara <TextBlock>dan </TextBlock>ya, Anda akan membutuhkannya <LineBreak/>. &#10;bekerja di dalam Textatribut:<TextBlock Text="..." />
Roman Starkov
6
"& # 10;" bekerja untuk saya. Saya tidak membutuhkan "& amp;" seperti yang disebutkan. Metode ini juga akan berfungsi saat menyetel teks seperti ini: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM
126

Coba ini:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
Paul Alexander
sumber
1
Belum mencoba ini secara langsung tetapi di luar kepala saya, Anda dapat mencoba xml: space = "melestarikan" dan kemudian menyematkan pemisah baris di properti Teks secara langsung.
Paul Alexander
3
Huruf besar penting. Ini <LineBreak />.
M. Dudley
10

Cara termudah adalah

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

Jadi Anda tinggal menulis kode XAML, dan <LineBreak />memiliki arti yang sama persis
di HTML atau "\ n" di C #.

Stephane Halimi
sumber
1
Jawaban ganda untuk pertanyaan Paul Alexander.
vapcguy
5

Bagaimana kalau memecah baris menjadi dua tag?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
Cameron MacFarland
sumber
5

<LineBreak /> tidak akan berfungsi jika berada di dalam koleksi seperti Grid atau StackPanel. Dalam kasus seperti itu, berikut ini akan berfungsi seperti yang ditunjukkan:

LineBreak di dalam koleksi

pengguna2063329
sumber
Saya mencoba ini sebagai konten untuk RadioButton. Semuanya tampak bekerja dengan baik sampai saya menjalankan program pada Windows 7. Pada windows 7 tombol tersebut berada di tengah vertikal antara dua baris. Windows 10 menyelaraskan tombol atas bagian atas secara default. Sementara Windows 10 akan menghormati properti VerticalContentAlignment, Windows 7 mengabaikannya. Saya harus menggunakan solusi LineBreak.
mrfelis
5

Cara yang benar untuk menggunakannya mungkin sebagai berikut:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
radu florescu
sumber
3
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

Cara sederhana CRLF = !&#10;&#13;

!&#10;&#13; - Bekerja pada semua kontrol wpf, xaml, silverlight seperti TextBlock, HyperlinkText, dan lainnya

pengguna1551704
sumber
1
(perbaiki jawaban Anda yang lain dan tandai agar tidak dihapus)
3

Jika Anda mengikat Teks TextBlock, tidak ada jawaban lain yang berfungsi. Cukup tambahkan '\ n' ke teks penjilid ke tempat yang ingin Anda putuskan.

orang baru
sumber
2

Ini juga berfungsi dengan baik:

<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>
Christoffer Eriksson
sumber
1

cukup gunakan kontrol AccessText. Anda dapat menggunakannya seperti label dan Anda memiliki properti TextWrapping = "WrapWithOverflow"

misalnya.

Punyaku seperti itu dan berfungsi dengan baik. Selain itu, Anda tidak memiliki masalah dalam mengubah teks secara dinamis.

MelloG
sumber
1

Saya terlambat ke pesta tetapi .. kurang lebih begini cara saya melakukannya, (ingat ItemSources saya adalah string biasa, tidak diformat, dan saya tidak perlu 'convertBack' apa pun)

public class SpaceToLineBreakConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return (!String.IsNullOrEmpty(value as string)) 
        ? new Regex(@"\s").Replace(value as string, "\n") 
        : value;            
    }

    public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Dan
sumber
0

Saya mengalami masalah serupa dan ingin mengikat String markup xaml ke TextBlock. Intinya menyimpan markup deklaratif di dalam TextBlock dalam string untuk digunakan nanti.

Beginilah yang saya lakukan : Saya membuat subclass TextBlock untuk membuat InlineCollection dapat diikat dan menulis Konverter antara string dan InlineCollection (atau sebenarnya daftar umum Inlines.)

Jodrell
sumber
0

ini &amp;#10;tidak berhasil untuk saya, ketika saya menggunakan penjilidan. Tapi ini berhasil:

$"first line {Environment.NewLine} second line"
Blechdose
sumber