Многострочный для WPF TextBox


364

Я разрабатываю приложение для отправки отзывов.

В основном я пытаюсь сделать TextBoxдля комментариев, но я привык к WinForms MultiLine=true. Я установил MinLinesна 3, что уже получается, но желательно, чтобы он мне нравился, если пользователь может печатать где угодно в этом блоке - например, нажимать ввод и делать точки с точками. Например:

- Item 1        blah
- Item 2                blahlb lahbvl   d

Но на данный момент текст все остается на одной строке.

- Item 1         blah - Item 2                      blahb blahb blah

Эти комментарии помогут заполнить тело отправленного электронного письма. Это может быть бессмысленно, если я не могу легко сохранить одинаковое форматирование при помещении этой строки в строку тела письма (чтобы она выглядела так, как при отправке, как при вводе).

Могу ли я достичь того, что мне нужно, или я должен оставить все текст в одной строке?

Ответы:


757

Включите TextWrapping="Wrap"и AcceptsReturn="True"на вашем TextBox.

Вы также можете включить AcceptsTabи SpellCheck.IsEnabledтоже.


1
эй @itowlson, если я создаю многострочное текстовое поле с твоим методом, его работа лучше, но если я хочу установить текстовый счетчик текстового поля label1.Content = textBox1.Text.Length;с этой строкой, его работа, но когда я нажимаю ввод в текстовом поле, счетчик увеличит 2 символа. как я могу сделать эту задачу, пожалуйста, помогите мне.
Джей Шукла

2
Это происходит потому, что новая строка состоит из двух символов (CR / LF). Если вы хотите относиться к нему как к одному персонажу, сделайте что-то подобное textBox1.Text.Replace("\r\n", " ").Length. Однако будьте осторожны: если это подразумевается как обратная связь с пользователем, поскольку ваш бэкэнд ограничивает количество символов, вам может потребоваться посчитать CR / LF как два символа, если бэкэнд будет это считать!
Itowlson

Я также задаю эту проблему в этой ссылке stackoverflow.com/questions/18459908/…
Джей Шукла

1
Также убедитесь, что для VerticalContentAlignment установлено значение Stretch
eran otzap

1
Также добавьте окружающий компонент ScrollVewer, чтобы иметь полосу прокрутки.
Борко Джурович

34

Кроме того, если, как и я, вы добавляете элементы управления непосредственно в XAML (без использования редактора), вы можете быть разочарованы тем, что он не растянется до доступной высоты даже после установки этих двух свойств.

Чтобы растянуть TextBox, установите Height="Auto".

ОБНОВИТЬ:

Оглядываясь назад, я думаю, что это должно было быть необходимо благодаря стилю по умолчанию для TextBox, определяющему высоту до некоторого стандарта для приложения где-то в ресурсах приложения. Возможно, стоит проверить это, если это вам помогло.


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 . И да, это действительно сработало для меня. Это может зависеть от элемента управления, в который вы поместили текстовое поле, было ли это чем-то нестандартным?
Андре Луус

1
Другая вероятность состоит в том, что у вас есть стиль по умолчанию для текстовых полей, определенных где-то в области действия этого TextBox, который определил другое значение для VerticalAlignment. Я бы посоветовался со Снупом.
Андре Луус

1
Если контейнер зафиксирован, высота авто не будет работать. Каждый родительский контейнер наверх должен иметь возможность расширяться. Перенос по полосе прокрутки тоже работает.
Ли Лувьер

5

Единственное свойство , соответствующее в WPF к

Свойство Winforms :TextBox.Multiline = true

это WPF свойство: TextBox.AcceptsReturn = true.

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

Все остальные параметры, такие как VerticalAlignementи WordWrapт. Д., Только контролируют взаимодействие TextBox в пользовательском интерфейсе, но не влияют на его Multilineповедение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.