Multiline สำหรับ WPF TextBox


364

ฉันกำลังพัฒนาแอพสำหรับส่งความคิดเห็น

โดยทั่วไปฉันพยายามที่จะทำให้การTextBoxแสดงความคิดเห็น แต่ฉันใช้ MultiLine=trueWinForms ฉันได้ตั้งค่าMinLinesเป็น 3 ซึ่งกำลังมาถึง แต่โดยเฉพาะอย่างยิ่งฉันต้องการถ้าผู้ใช้สามารถพิมพ์ที่ใดก็ได้ในบล็อกนี้ - เช่นกด Enter และทำจุดจุดเรียงลำดับของสิ่ง ตัวอย่างเช่น:

- Item 1        blah
- Item 2                blahlb lahbvl   d

แต่ในขณะนี้ข้อความทั้งหมดอยู่ในบรรทัดเดียว

- Item 1         blah - Item 2                      blahb blahb blah

ความคิดเห็นเหล่านี้จะช่วยเติมเนื้อหาของอีเมลที่ถูกส่ง อาจไม่มีจุดหมายหากฉันไม่สามารถจัดรูปแบบเดิมได้อย่างง่ายดายเมื่อวางสตริงนี้ลงในสตริงเนื้อหาอีเมล (เพื่อให้ดูเหมือนว่าจะเป็นเมื่อส่งตามที่ทำเมื่อพิมพ์)

ฉันสามารถบรรลุสิ่งที่ฉันทำหรือฉันต้องปล่อยให้มันเป็นข้อความทั้งหมดในหนึ่งบรรทัด?

คำตอบ:


757

เปิดใช้งานTextWrapping="Wrap"และAcceptsReturn="True"ในกล่องข้อความของคุณ

คุณอาจต้องการเปิดใช้งานAcceptsTabและSpellCheck.IsEnabledเช่นกัน


1
เฮ้ @ itowlson ถ้าฉันสร้างกล่องข้อความหลายบรรทัดด้วยวิธีการของคุณมันทำงานได้ดีขึ้น แต่ถ้าฉันต้องการที่จะตั้งค่า textbox textbox label1.Content = textBox1.Text.Length;กับบรรทัดนี้มันทำงานได้ แต่เมื่อฉันกด enter ในตัวนับ textbox จะเพิ่ม 2 ตัวอักษร ฉันจะทำงานนี้ได้อย่างไรโปรดช่วยฉันด้วย
Jay Shukla

2
สิ่งนี้เกิดขึ้นเนื่องจากการขึ้นบรรทัดใหม่คืออักขระสองตัว (CR / LF) textBox1.Text.Replace("\r\n", " ").Lengthหากคุณต้องการที่จะรักษามันเป็นตัวเดียวทำสิ่งที่ชอบ โปรดระวัง: หากนี่เป็นความคิดเห็นของผู้ใช้เนื่องจาก back end ของคุณ จำกัด จำนวนตัวอักษรคุณอาจต้องนับ CR / LF เป็นตัวละครสองตัวถ้านั่นเป็นวิธีที่ back end จะนับ!
itowlson

ฉันยังถามปัญหานี้ใน Link stackoverflow.com/questions/18459908/
Jay Shukla

1
และให้แน่ใจว่า VerticalContentAlignment ถูกตั้งค่าเป็น Stretch
eran otzap

1
นอกจากนี้ยังเพิ่มองค์ประกอบ ScrollVewer โดยรอบเพื่อให้มีแถบเลื่อน
Borko Djurovic

34

นอกจากนี้หากคุณเพิ่มตัวควบคุมลงใน XAML เช่นเดียวกับฉัน (ไม่ได้ใช้โปรแกรมแก้ไข) คุณอาจรู้สึกหงุดหงิดที่จะไม่ขยายไปถึงความสูงที่มีอยู่แม้ว่าจะตั้งค่าคุณสมบัติทั้งสองแล้วก็ตาม

Height="Auto"ที่จะทำให้ยืดช่องตั้งค่า

UPDATE:

ในการหวนกลับฉันคิดว่ามันจะต้องมีความจำเป็นต้องขอบคุณสไตล์เริ่มต้นสำหรับกล่องข้อความที่ระบุความสูงมาตรฐานสำหรับแอปพลิเคชันบางแห่งในแหล่งข้อมูลแอป การตรวจสอบสิ่งนี้อาจช่วยคุณได้


19

นี่คือตัวอย่างXAMLที่จะอนุญาตให้TextBoxยอมรับข้อความหลายบรรทัดและใช้เป็นแถบเลื่อนของตัวเอง:

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

12

ตรงกันข้ามกับ @Andre Luus การตั้งค่าHeight="Auto"จะไม่TextBoxยืดออก วิธีแก้ปัญหาที่ฉันพบคือการตั้งค่าVerticalAlignment="Stretch"


1
ค่าเริ่มต้นสำหรับ 'VerticalAlignment' เป็น 'ยืด' ดู MSDN และใช่มันใช้งานได้จริงสำหรับฉัน มันอาจขึ้นอยู่กับการควบคุมที่คุณวางกล่องข้อความไว้ แต่มันเป็นสิ่งที่ไม่ได้มาตรฐานใช่หรือไม่
Andre Luus

1
โอกาสอื่นคือคุณมีสไตล์เริ่มต้นสำหรับกล่องข้อความที่กำหนดไว้ในขอบเขตของกล่องข้อความนั้นซึ่งกำหนดค่าที่แตกต่างกันสำหรับ VerticalAlignment ฉันจะตรวจสอบกับสนูป
Andre Luus

1
หากคอนเทนเนอร์ได้รับการแก้ไขความสูงอัตโนมัติจะไม่ทำงาน คอนเทนเนอร์พาเรนต์ทั้งหมดไปด้านบนต้องสามารถขยายได้ การห่อในแถบเลื่อนจะทำงานเช่นกัน
Lee Louviere

5

คุณสมบัติเฉพาะที่สอดคล้องกันใน WPF ไป

คุณสมบัติWinforms :TextBox.Multiline = true

เป็นWPFTextBox.AcceptsReturn = trueทรัพย์สิน:

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

การตั้งค่าอื่น ๆ ทั้งหมดเช่นVerticalAlignement, WordWrapฯลฯ เพียงควบคุมวิธีการโต้ตอบกล่องข้อความใน UI แต่ไม่ได้ส่งผลกระทบต่อMultilineพฤติกรรม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.