Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>

Ответ 2

У меня была та же проблема. Вы можете использовать это для изменить размер fontsize текстового блока , чтобы заполнить область, когда она имеет переполнение.. p >


<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
    <TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>

Ответ 3

Я нашел отличный способ сделать это, используя 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>

Ответ 4

Элемент управления WPF ViewBox может увеличиваться/уменьшаться с его содержимым до доступного пространства.

Просто поместите свой TextBlock в ViewBox как:

<Viewbox Stretch="Uniform" Width="50" Height="50">
    <TextBlock Text="Test" />
</Viewbox>

ViewBox обычно масштабируется его контейнером.

Ответ 5

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

ViewBox увеличит любой контент, чтобы заполнить его контейнер. Проблема в том, что TextBlock, в то время как он имеет размер по своему тексту, имеет прописку сверху и снизу, от которой вы не можете избавиться (без особого подъема). Это может приблизиться к тому, что вы хотите, т. К.

Ответ 6

Чтобы обеспечить упаковку, вам необходимо установить MaxWidth и/или MaxHeight в TextBlock

<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
      <TextBlock  MaxWidth="500" TextWrapping="Wrap" FontSize="30" VerticalAlignment="Center"
                  Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>