WPF TextBlock字体调整大小以填充网格中的可用空间

时间:2010-02-17 16:57:04

标签: wpf fonts resize textblock

我有一些文本在运行时显示在文本块中。我想要 字体大小最大可以填充区域 给出。我想我已正确设置文本块以“自动调整大小”和 我尝试增加字体大小,直到textblock大于 它的父母然后减少字体大小1.问题是我不能 让控件重绘/重新计算它的大小。

这是更好的方法吗?或者我有办法使我的方法有效吗?

6 个答案:

答案 0 :(得分:67)

TextBlock包裹在ViewBox

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

答案 1 :(得分:26)

我遇到了同样的问题。您可以使用此调整大小 文本块 fontsize 来填充溢出时的区域。


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

答案 2 :(得分:8)

我找到了一种使用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>

答案 3 :(得分:7)

WPF ViewBox控件可以使其内容增长/缩小到可用空间。

只需将TextBlock放在ViewBox as;

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

ViewBox通常由其容器缩放。

答案 4 :(得分:3)

嗯,这不是一个“完美”的答案,但这是一个快速的黑客攻击(你可以将其放入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虽然大小与文字一致,但在顶部和底部都有填充物,你无法摆脱它(没有做一些繁重的工作)。这可能会让你更接近你想要的东西,

答案 5 :(得分:2)

为确保包装,您需要设置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."/>