Multiline cho WPF TextBox


364

Tôi đang phát triển một ứng dụng để gửi một số phản hồi.

Về cơ bản, tôi đang cố gắng đưa ra TextBoxnhận xét, nhưng tôi đã quen với WinForms MultiLine=true. Tôi đã đặt MinLinesthành 3, đang đến đó, nhưng tốt nhất là tôi thích nó nếu người dùng có thể nhập bất cứ nơi nào trong khối này - như nhấn enter và thực hiện sắp xếp các điểm. Ví dụ:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Nhưng tại thời điểm này, tất cả các văn bản vẫn ở trên một dòng.

- Item 1         blah - Item 2                      blahb blahb blah

Những bình luận này sau đó sẽ giúp điền vào phần thân của một email được gửi. Có thể là vô nghĩa nếu tôi không thể dễ dàng giữ định dạng tương tự khi đặt chuỗi này vào chuỗi nội dung email (để nó trông giống như khi được gửi như khi nhập).

Tôi có thể đạt được những gì tôi sau hoặc tôi phải để nó dưới dạng tất cả văn bản trên một dòng không?

Câu trả lời:


757

Kích hoạt TextWrapping="Wrap"AcceptsReturn="True"trên TextBox của bạn.

Bạn cũng có thể muốn kích hoạt AcceptsTabSpellCheck.IsEnabledquá.


1
hey @itowlson nếu tôi tạo hộp văn bản nhiều dòng bằng phương thức của bạn thì nó hoạt động tốt hơn nhưng nếu tôi muốn đặt bộ đếm văn bản hộp văn bản label1.Content = textBox1.Text.Length;với dòng này thì nó hoạt động nhưng khi tôi nhấn enter trong bộ đếm hộp văn bản sẽ tăng 2 ký tự. Làm thế nào tôi có thể làm nhiệm vụ này xin vui lòng giúp tôi.
Jay Shukla

2
Điều này xảy ra vì dòng mới là hai ký tự (CR / LF). Nếu bạn muốn coi nó như một nhân vật duy nhất, hãy làm một cái gì đó như thế textBox1.Text.Replace("\r\n", " ").Length. Mặc dù vậy, hãy cẩn thận: nếu điều này có nghĩa là phản hồi của người dùng vì mặt sau của bạn giới hạn số lượng ký tự, bạn có thể cần tính CR / LF là hai ký tự nếu đó là cách mặt sau sẽ tính nó!
itowlson

Tôi cũng hỏi vấn đề này trong Liên kết stackoverflow.com/questions/18459908/ trộm
Jay Shukla

1
Ngoài ra, hãy đảm bảo rằng
dọcContentAlocation

1
Đồng thời thêm thành phần ScrollVewer xung quanh để có thanh cuộn.
Borko Djurovic

34

Ngoài ra, nếu như tôi, bạn thêm các điều khiển trực tiếp trong XAML (không sử dụng trình chỉnh sửa), bạn có thể cảm thấy thất vọng vì nó sẽ không kéo dài đến độ cao có sẵn, ngay cả sau khi đặt hai thuộc tính đó.

Để làm cho TextBox kéo dài, hãy đặt Height="Auto".

CẬP NHẬT:

Nhìn lại, tôi nghĩ rằng điều này phải là cần thiết nhờ một kiểu mặc định cho TextBoxes chỉ định chiều cao cho một số tiêu chuẩn cho ứng dụng ở đâu đó trong tài nguyên Ứng dụng. Nó có thể đáng để kiểm tra điều này nếu điều này giúp bạn.


19

Đây là mẫu XAMLsẽ cho phép TextBoxchấp nhận văn bản nhiều dòng và nó sử dụng Scrollbars của riêng nó:

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

12

Trái ngược với @Andre Luus, cài đặt Height="Auto"sẽ không làm cho TextBoxcăng. Giải pháp tôi tìm được là đặtVerticalAlignment="Stretch"


1
Giá trị mặc định cho 'Dọc dọc' 'Kéo dài' tham khảo MSDN . Và vâng, nó thực sự làm việc cho tôi. Nó có thể phụ thuộc vào sự kiểm soát mà bạn đặt hộp văn bản mặc dù, đó có phải là một cái gì đó không chuẩn?
Andre Luus

1
Một khả năng khác là bạn có một kiểu mặc định cho các hộp văn bản được xác định ở đâu đó trong phạm vi của TextBox đó đã xác định một giá trị khác cho Dọc dọc. Tôi sẽ kiểm tra với Snoop.
Andre Luus

1
Nếu container cố định, chiều cao tự động sẽ không hoạt động. Mỗi container cha mẹ lên đầu phải có khả năng mở rộng. Gói trong một thanh cuộn hoạt động quá.
Lee Louviere

5

Các tài sản duy nhất tương ứng trong WPF đến

Tài sản Winforms :TextBox.Multiline = true

là tài sản WPF : TextBox.AcceptsReturn = true.

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

Tất cả các cài đặt khác, chẳng hạn như VerticalAlignement, WordWrapv.v., chỉ kiểm soát cách TextBox tương tác trong giao diện người dùng nhưng không ảnh hưởng đến Multilinehành vi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.