Масштабирование и перенос текстовых блоков WPF

У меня есть текстовый блок, который нужно

  1. отображать текст максимально возможным размером шрифта в пределах заданного пространства (меньше символов, большие буквы, и наоборот)
  2. обернуть текст в заданное пространство.

Я попытался использовать текстовое поле внутри окна просмотра, как показано ниже, но обтекание текстом не работает, если я не укажу ширину и высоту текстового блока. Если я укажу ширину и высоту до того же размера, что и окно просмотра, очевидно, что масштабирования не произойдет.

<Viewbox Stretch="Fill" Width="100" Height="100">
<TextBlock TextWrapping="Wrap"/>
</Viewbox>

Есть ли другой способ добиться этого? Или мне стоит подумать о написании алгоритма для увеличения размера шрифта вручную в зависимости от количества текста? Любая помощь приветствуется.


person Prabath Yapa    schedule 26.09.2010    source источник
comment
Вы можете вручную выполнить разрыв строки, обработав событие PreviewKeyDown или PreviewKeyUp и проверив, достигнут ли предел длины вашего текста. Другой способ добиться того же результата: создать собственный конвертер и сделать там разрыв строки. Вы можете передать параметр или использовать поле, чтобы указать MaxLength.   -  person 0xbadf00d    schedule 26.05.2011


Ответы (1)


Попробуйте этот код.

XAML:

<TextBlock x:Name="textBlock"
           Text="Something text"
           TextWrapping="Wrap"
           FontSize="1"
           Width="100"
           Opacity="0" />

Код позади:

while (textBlock.ActualHeight <= 100)
{
    textBlock.FontSize += 0.1;
    textBlock.UpdateLayout();
}
textBlock.FontSize -= 0.1;
textBlock.Opacity = 1;
person Vitaliy    schedule 14.11.2014