У меня есть некоторый текст, который отображен во время выполнения в textblock. Я хочу, чтобы размер шрифта был самым большим, это может быть должно заполнить область, которая дана. Я думаю, что у меня есть установка textblock правильно к "авторазмеру", и я пытаюсь увеличить размер шрифта, пока textblock не больше, чем, чем его родитель затем уменьшает размер шрифта на 1. Проблема, я не могу получить контроль для перерисовывания/повторно вычисления его размера.
Лучший способ сделать это? Или есть ли способ, которым я могу заставить свой метод работать?
Оберните TextBlock
в ViewBox
:
<Grid>
<Viewbox>
<TextBlock TextWrapping="Wrap" Text="Some Text" />
</Viewbox>
</Grid>
Что ж, это не "идеальный" ответ, но это быстрый прием (вы можете бросить его в kaxaml и проверить):
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Height="300" Background="green">
<Viewbox>
<TextBlock Background="red" Text="Hurr"/>
</Viewbox>
</Grid>
</Page>
Окно просмотра
увеличит любое содержимое, чтобы заполнить его контейнер. Проблема в том, что TextBlock
, хотя размер его соответствует тексту, имеет отступы сверху и снизу, от которых вы не можете избавиться (не выполняя некоторых тяжелых действий). Это может приблизить вас к тому, чего вы хотите.
Я обнаружил отличный способ сделать это с помощью ViewBox
:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Viewbox Grid.Row="0" Grid.Column="0" Stretch="Uniform">
<TextBlock Name="tbTest" Background="Yellow" Text="This is some text" />
</Viewbox>
<ContentControl Grid.Column="0" Grid.Row="2">
<TextBlock>This is some text</TextBlock>
</ContentControl>
</Grid>