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

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

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

6 ответов


оберните TextBlock внутри ViewBox:

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

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


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


Я нашел отличный способ сделать это с помощью 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>

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

просто поместите ваш TextBlock внутри ViewBox as;

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

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


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


чтобы обеспечить обертывание, вам нужно установить 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."/>