Multiline untuk WPF TextBox

364

Saya sedang mengembangkan aplikasi untuk mengirim umpan balik.

Pada dasarnya saya mencoba membuat TextBoxkomentar, tetapi saya sudah terbiasa dengan WinForms MultiLine=true. Saya telah menetapkan MinLineske 3, yang sudah sampai di sana, tetapi saya lebih suka jika pengguna dapat mengetik di mana saja di blok ini - seperti tekan enter dan lakukan hal-hal titik dot semacam itu. Sebagai contoh:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Tetapi pada saat ini semua teks tetap pada satu baris.

- Item 1         blah - Item 2                      blahb blahb blah

Komentar-komentar ini kemudian akan membantu mengisi isi email yang dikirimkan. Mungkin tidak ada gunanya jika saya tidak dapat dengan mudah menyimpan pemformatan yang sama saat memasukkan string ini ke string body email (sehingga terlihat seperti itu ketika dikirim seperti halnya saat diketik).

Dapatkah saya mencapai apa yang saya cari atau saya harus meninggalkannya karena semua teks dalam satu baris?

baron
sumber

Jawaban:

757

Aktifkan TextWrapping="Wrap"dan AcceptsReturn="True"di TextBox Anda.

Anda mungkin juga ingin mengaktifkan AcceptsTabdan SpellCheck.IsEnabledjuga.

itowlson
sumber
1
hey @itowlson jika saya membuat kotak teks multiline dengan metode Anda kerjanya lebih baik tetapi jika saya ingin mengatur penghitung teks kotak teks label1.Content = textBox1.Text.Length;dengan baris ini berfungsi tetapi ketika saya menekan enter di penghitung kotak teks akan menambah 2 karakter. bagaimana saya bisa melakukan tugas ini, tolong bantu saya.
Jay Shukla
2
Ini terjadi karena baris baru adalah dua karakter (CR / LF). Jika Anda ingin memperlakukannya sebagai karakter tunggal, lakukan sesuatu seperti textBox1.Text.Replace("\r\n", " ").Length. Berhati-hatilah: jika ini dimaksudkan sebagai umpan balik pengguna karena ujung belakang Anda membatasi jumlah karakter, Anda mungkin perlu menghitung CR / LF sebagai dua karakter jika demikian bagaimana ujung belakang akan menghitungnya!
itowlson
Saya juga menanyakan masalah ini di Tautan ini stackoverflow.com/questions/18459908/…
Jay Shukla
1
Pastikan juga bahwa VerticalContentAlignment diatur ke Stretch
eran otzap
1
Juga tambahkan komponen ScrollVewer di sekitarnya untuk memiliki bilah gulir.
Borko Djurovic
34

Juga, jika, seperti saya, Anda menambahkan kontrol langsung di XAML (tidak menggunakan editor), Anda mungkin merasa frustrasi karena tidak akan meregang ke ketinggian yang tersedia, bahkan setelah mengatur kedua properti tersebut.

Untuk membuat peregangan TextBox, atur Height="Auto".

MEMPERBARUI:

Dalam retrospeksi, saya pikir ini harus dilakukan berkat gaya default untuk TextBoxes menentukan ketinggian hingga beberapa standar untuk aplikasi di suatu tempat di sumber daya App. Mungkin ada baiknya memeriksa ini jika ini membantu Anda.

Andre Luus
sumber
19

Berikut adalah contoh XAMLyang akan memungkinkan TextBoxuntuk menerima teks multiline dan menggunakan Scrollbars itu sendiri:

<TextBox
Height="200"
Width="500"
TextWrapping="Wrap"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"/>
FireFalcon
sumber
12

Berlawanan dengan @Andre Luus, pengaturan Height="Auto"tidak akan membuat TextBoxperegangan. Solusi yang saya temukan adalah mengaturVerticalAlignment="Stretch"

Elkvis
sumber
1
Nilai default untuk 'VerticalAlignment' adalah 'Stretch' merujuk MSDN . Dan ya, itu benar-benar berhasil untuk saya. Ini mungkin tergantung pada kontrol Anda menempatkan kotak teks, apakah itu sesuatu yang tidak standar?
Andre Luus
1
Kemungkinan lain adalah bahwa Anda memiliki gaya default untuk kotak teks yang ditentukan di suatu tempat dalam lingkup TextBox itu yang menentukan nilai yang berbeda untuk VerticalAlignment. Saya akan memeriksa dengan Snoop.
Andre Luus
1
Jika wadah sudah diperbaiki, ketinggian otomatis tidak akan berfungsi. Setiap induk kontainer ke atas harus dapat mengembang. Membungkus di scrollbar juga berfungsi.
Lee Louviere
5

Satu- satunya properti yang sesuai dalam WPF ke

Properti Winforms :TextBox.Multiline = true

adalah WPF properti: TextBox.AcceptsReturn = true.

<TextBox AcceptsReturn="True" ...... />

Semua pengaturan lain, seperti VerticalAlignement, WordWrapdll., Hanya mengontrol bagaimana TextBox berinteraksi di UI tetapi tidak mempengaruhi Multilineperilaku.

marsh-goyangkan
sumber