В моем приложении WPF есть относительно небольшое поле ограниченной ширины, где мне нужно отобразить некоторый текст, введенный пользователем. Реально можно ожидать, что текст будет состоять из одного-пяти слов, но слова легко могут быть больше, чем рамка.
Если текст слишком длинный, но содержит несколько слов, которые можно разбить на строки, я бы хотел, чтобы текст переносился. Однако, если какое-либо отдельное слово слишком велико, чтобы поместиться, я хочу, чтобы размер текста уменьшался до тех пор, пока это слово не станет достаточно маленьким, чтобы поместиться, независимо от того, переносится ли этот текст. Мне все равно, сколько места по вертикали занимает текст.
Вот пример, который я собрал вручную в Excel, чтобы продемонстрировать предполагаемое поведение:
В примере 1 весь текст умещается в рамке.
В примере 2 текст состоит из двух слов, поэтому его можно перенести без сжатия текста.
В примере 3 одно слово слишком длинное, поэтому текст быть сжатым.
В примере 4 текст может быть перенесен, но он все еще содержит слово, которое слишком длинное, поэтому текст должен быть сжат до тех пор, пока это самое длинное слово не уместится.
Как я могу сделать это в WPF? Я не смог найти комбинацию ViewBox
и TextBlock.TextWrapping
, которая делает это.
EDIT:
Если мне сделать нужно сделать это вручную (что было бы немного кошмаром), то есть ли способ, по крайней мере, я могу выяснить, что TextBlock решает, что это «строка»? Мне нужно было бы знать, как он будет разбивать текст, прежде чем я смогу определить, будет ли какая-либо «строка» слишком длинной.