62

我有一些文本在运行时显示在文本块中。我希望字体大小尽可能大,以填充给定的区域。我想我的文本块设置正确为“自动调整大小”,我尝试增加字体大小,直到文本块大于其父级,然后将字体大小减小 1。问题是我无法让控件重绘/重新计算它的大小。

有更好的方法吗?或者有什么方法可以让我的方法奏效吗?

4

6 回答 6

87

TextBlock将内部包裹起来ViewBox

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>
于 2010-02-17T17:10:56.743 回答
39

我有同样的问题。您可以使用它来调整文本块字体大小以在溢出时填充该区域。


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

于 2012-07-18T08:06:20.000 回答
12

WPFViewBox控件可以随其内容增长/缩小到可用空间。

只需将您的TextBlock放在一个ViewBoxas 中;

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

ViewBox通常由其容器缩放。

于 2012-11-07T11:31:53.327 回答
11

我找到了一个很好的方法来做到这一点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>
于 2010-02-17T17:11:59.520 回答
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,虽然它的大小与文本相符,但在顶部和底部都有您无法摆脱的填充(无需做一些繁重的工作)。这可能会让你更接近你想要的东西。

于 2010-02-17T17:18:49.617 回答
2

为了确保包装,您需要设置MaxWidth和/MaxHeightTextBlock

<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."/>

于 2015-08-06T23:03:38.523 回答