WPF текст Wrap vs WrapWithOverflow

171

В чем «концептуальная» разница между TextWrapping="Wrap"и TextWrapping="WrapWithOverflow"(например, для TextBox)? На странице MSDN про класс TextBox ничего нет ... Спасибо.

Даниэле Арманаско
источник

Ответы:

188

MSDN

WrapWithOverflow Разрыв строки происходит, если линия переполняется за пределы доступной ширины блока. Однако строка может переполниться за пределы ширины блока, если алгоритм разрыва строки не может определить возможность разрыва строки, как в случае очень длинного слова, ограниченного в контейнере фиксированной ширины без прокрутки.
NoWrap Перенос строки не выполняется.
Перенос строки происходит, если строка выходит за пределы доступной ширины блока, даже если стандартный алгоритм разрыва строки не может определить возможность разрыва строки, как в случае очень длинного слова, ограниченного в контейнере фиксированной ширины без прокрутки.

Надеюсь это поможет

Арсен Мкртчян
источник
11
Я знаю, что этот вопрос был адресован WPF, но я подумал, что стоит отметить, что WrapWithOverflowон не поддерживается в Silverlight. Только Wrapи NoWrapподдерживаются в Silverlight. msdn.microsoft.com/en-us/library/…
blachniet
3
Я прочитал это и до сих пор не уверен в разнице. Является ли основная идея, WrapWithOverFlowкоторая не будет ломать слова, но Wrapбудет?
Брайан Дж
6
@BrianJ - см. Мой ответ для некоторых примеров.
Кен
317

Некоторые примеры:

Это оригинальная, развернутая версия:

Без упаковки


Это NoWrap.

Nowrap


Это Wrap. Слова Removeи Sampleбыли обернуты в veи le, соответственно, даже если нет возможности разрыва строки.

Заворачивать


Это WrapWithOverflow. Символы veи leне отображаются (они выходят за пределы доступной ширины блока), поскольку нет возможности разрыва строки. В Allобоих случаях он был перенесен, потому что spaceсимвол - это возможность разрыва строки.

WrapWithOverflow


Редактировать:

Как предлагается в комментариях, вот несколько примеров того, как Wrapотносится к пробелам. Когда Widthэто 100, Wrapи WrapWithOverflowидентичны. Wrapрассматривает пробел между widerи exampleкак возможность разрыва строки, поэтому exampleставится на новую строку, чтобы сохранить все непрерывное слово.

введите описание изображения здесь

кругозор
источник
5
Для этого ответа было бы полезно включить еще один (более широкий) пример кнопки в каждом режиме, который имеет допустимый разрыв пробела. На первый взгляд, это означает, что Wrapполностью игнорирует пробелы, но это не так.
Скотт Стаффорд
8

Одна вещь, которую нужно добавить к другим ответам, WrapWithOverflow позволяет использовать обрезку текста (многоточие) для длинных слов, которые обрезаются:

введите описание изображения здесь

<TextBlock TextWrapping="WrapWithOverflow" Width="120" TextTrimming="CharacterEllipsis">
    A really long word is antidisestablishmentarianism and we can use ellipsis trimming.
</TextBlock>
Ваймс
источник