Шрифт WPF TextBlock изменяет размер для заполнения свободного места в Сетке

У меня есть некоторый текст, который отображен во время выполнения в textblock. Я хочу, чтобы размер шрифта был самым большим, это может быть должно заполнить область, которая дана. Я думаю, что у меня есть установка textblock правильно к "авторазмеру", и я пытаюсь увеличить размер шрифта, пока textblock не больше, чем, чем его родитель затем уменьшает размер шрифта на 1. Проблема, я не могу получить контроль для перерисовывания/повторно вычисления его размера.

Лучший способ сделать это? Или есть ли способ, которым я могу заставить свой метод работать?

50
задан Dave Clemmer 24 September 2011 в 07:04
поделиться

3 ответа

Оберните TextBlock в ViewBox :

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>
70
ответ дан 7 November 2019 в 10:40
поделиться

Что ж, это не "идеальный" ответ, но это быстрый прием (вы можете бросить его в 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 , хотя размер его соответствует тексту, имеет отступы сверху и снизу, от которых вы не можете избавиться (не выполняя некоторых тяжелых действий). Это может приблизить вас к тому, чего вы хотите.

3
ответ дан 7 November 2019 в 10:40
поделиться

Я обнаружил отличный способ сделать это с помощью 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>
9
ответ дан 7 November 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: