10

У меня есть TextBlock с длинной строкой текста, которую я хочу обернуть. Я поместил TextBlock в ViewBox, ожидая изменения размера текста, пока все еще обертывается, однако это, похоже, не происходит. ViewBox просто изменяет размер TextBox, так что весь текст подходит для одной строки, что делает текст очень маленьким.Текст TextBlock не переносится при размещении внутри ViewBox

Как я могу использовать ViewBox для изменения размера текста при использовании TextWrapping.

Вот мой код:

<Viewbox> 
    <TextBlock Text="The Option text can also dynamically grow/shrink to fit more content. More text to go here....................." TextWrapping="Wrap"/> 
</Viewbox> 

Это является частью магазина приложения Windows 8 так WinRT Xaml.

+0

Может быть полезным [WPF: мы можем сделать две строки в ViewBox?] (HTTP: // социальный. msdn.microsoft.com/Forums/vstudio/en-US/9dc8a7e3-e068-44e5-a363-85e8314f075d/wpf-can-we-make-a-two-line-in-the-viewbox) – Xyroid

+0

Нет, это doesn ' t, но спасибо за попытку – Sun

+1

@ Связанное сообщение Xyroid верно, хотя вам нужно как-то дать 'TextBlock'' MaxWidth', чтобы он определил, что ему нужно 'TextWrap'. Вы можете сделать это вручную в XAML, или вы можете сделать что-то вроде «Viewbox» «Loaded», узнать размер рендеринга и установить для него 'MaxWidth'' Child'. –

ответ

20

Просто установите ширину на TextBlock.

 <Viewbox Width="500"> 
      <TextBlock Width="100" TextWrapping="Wrap">This is the text that's long and on two lines.</TextBlock> 
     </Viewbox> 

TextBlock with width 100 in ViewBox with width 500

ViewBox Так будет увеличить/уменьшить масштаб все его содержимое. Если вы не ограничите его содержимое, либо установив ширину на TextBlock, ViewBox предоставит ему бесконечное пространство для расширения. Вы также можете добавить корень Grid с шириной и высотой в пределах ViewBox и выложить свои элементы в этом месте, тогда весь участок будет увеличен в соответствии с шириной ViewBox.

В изображении, ширина TextBlock 100 будет увеличена, чтобы быть ширина ViewBox которая составляет 500. Таким образом, чтобы получить упаковку вы хотите, просто настроить TextBlock ширину, пока она не будет выглядеть красиво.

(Очевидно, он должен сказать три строки, но я не повторно загружая только для этого)

+0

ОК, это работает, но я использую текстовый блок в DataTemplate, для каждого элемента текст отличается, поэтому я не могу «настроить» ширину текстового поля. – Sun

+0

Конечно, вы можете. Просто установите ширину, которая дает правильный поиск образца текста. «Просмотр» будет задан в контейнере элементов шаблона, а «TextBlock» будет масштабироваться с помощью обертки. Я не знаю, чего вы пытаетесь достичь, но, возможно, «Viewbox» - это красная селедка. Вытащите его. –