WPF TextBox için Çok Satırlı


364

Geri bildirim göndermek için bir uygulama geliştiriyorum.

Temelde TextBoxyorum yapmak için çalışıyorum , ama WinForms için alışkınım MultiLine=true. Ben MinLinesoraya 3, ben ayarladım , ama tercihen kullanıcı bu blokta herhangi bir yere yazmak mümkün ise basın istiyorum - basın gibi girin ve nokta nokta tür bir şey yapmak istiyorum. Örneğin:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Ama şu anda metin bir satırda kalıyor.

- Item 1         blah - Item 2                      blahb blahb blah

Bu yorumlar daha sonra gönderilen bir e-postanın gövdesini doldurmaya yardımcı olur. Bu dizeyi e-posta gövdesi dizesine yerleştirirken aynı biçimlendirmeyi kolayca tutamazsam anlamsız olabilir (böylece yazıldığında olduğu gibi gönderildiğinde olduğu gibi görünür).

Neyin peşinde olduğumu başarabilir miyim veya tek satırda tüm metin olarak bırakmak zorunda mıyım?

Yanıtlar:


757

Etkinleştirme TextWrapping="Wrap"ve AcceptsReturn="True"sizin TextBox.

Ayrıca etkinleştirmek isteyebilirsiniz AcceptsTabve SpellCheck.IsEnabledde.


1
hey @itowlson Eğer yöntem ile çok satırlı metin kutusu oluşturursanız daha iyi label1.Content = textBox1.Text.Length;çalışır ama bu satır ile metin kutusu metin sayacı ayarlamak istiyorsanız ama metin kutusuna girmek için enter tuşuna bastığımda 2 karakter artar. bu görevi nasıl yapabilirim lütfen bana yardım et.
Jay Shukla

2
Bunun nedeni, yeni satırın iki karakter (CR / LF) olmasıdır. Tek bir karakter olarak ele almak istiyorsanız, benzer bir şey yapın textBox1.Text.Replace("\r\n", " ").Length. Yine de dikkatli olun: bu kullanıcı geri bildirimi anlamına geliyorsa, arka ucunuz karakter sayısını sınırlandırırsa, arka uç bunu sayacaksa CR / LF'yi iki karakter olarak saymanız gerekebilir!
itowlson

Ben de bu bağlantıda bu soruyu sormak stackoverflow.com/questions/18459908/…
Jay Shukla

1
Ayrıca VerticalContentAlignment öğesinin Stretch olarak ayarlandığından emin olun
eran otzap

1
Ayrıca kaydırma çubuğuna sahip olmak için çevresindeki ScrollVewer bileşenini ekleyin.
Borko Djurovic

34

Ayrıca, benim gibi denetimleri doğrudan XAML'ye (düzenleyiciyi kullanmadan) eklerseniz, bu iki özelliği ayarladıktan sonra bile kullanılabilir yüksekliğe gerilmemesi sizi hayal kırıklığına uğratabilir.

TextBox'ı genişletmek için Height="Auto".

GÜNCELLEME:

Geriye dönüp baktığımda, uygulama kaynaklarında bir yerde uygulama için bazı standartların yüksekliğini belirten TextBox'lar için varsayılan bir stil sayesinde bunun gerekli olması gerektiğini düşünüyorum. Bu size yardımcı olduysa bunu kontrol etmek faydalı olabilir.


19

Çok satırlı metni kabul etmenize XAMLizin verecek örnek TextBoxve kendi Kaydırma Çubuklarını kullanması:

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

12

@Andre Luus'un aksine, ayar streç Height="Auto"yapmayacaktır TextBox. Bulduğum çözüm,VerticalAlignment="Stretch"


1
'VerticalAlignment' için varsayılan değer olan 'Stretch' MSDN'i bakınız . Ve evet, gerçekten benim için çalıştı. Metin kutusunu yerleştirdiğiniz kontrole bağlı olabilir, standart olmayan bir şey miydi?
Andre Luus

1
Başka bir olasılık, dikey metin hizalaması için farklı bir değer tanımlayan o metin kutusu kapsamında bir yerde tanımlanmış metin kutuları için varsayılan bir stil olmasıdır. Snoop ile kontrol ederdim.
Andre Luus

1
Kap sabitse, otomatik yükseklik ayarı çalışmaz. Üstteki her üst kap genişleyebilmelidir. Kaydırma çubuğuna kaydırma da işe yarar.
Lee Louviere

5

Tek özellik için WPF tekabül

Winforms özelliği:TextBox.Multiline = true

olan WPF özelliği: TextBox.AcceptsReturn = true.

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

Gibi diğer tüm ayarlar, VerticalAlignement, WordWrapvb sadece arayüzünde TextBox etkileşimde ancak etkilemez nasıl kontrol Multilinedavranışı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.