【发布时间】:2011-01-17 23:13:04
【问题描述】:
我有一些文本在运行时显示在文本块中。我想要 字体大小最大可以填充该区域 给定的。我想我已经正确设置了文本块以“自动调整大小”并且 我尝试增加字体大小,直到文本块大于 然后它的父级将字体大小减小 1。问题是我不能 让控件重绘/重新计算其大小。
有更好的方法吗?或者有什么方法可以让我的方法起作用?
【问题讨论】:
标签: wpf fonts resize textblock
我有一些文本在运行时显示在文本块中。我想要 字体大小最大可以填充该区域 给定的。我想我已经正确设置了文本块以“自动调整大小”并且 我尝试增加字体大小,直到文本块大于 然后它的父级将字体大小减小 1。问题是我不能 让控件重绘/重新计算其大小。
有更好的方法吗?或者有什么方法可以让我的方法起作用?
【问题讨论】:
标签: wpf fonts resize textblock
将TextBlock 包裹在ViewBox 中:
<Grid>
<Viewbox>
<TextBlock TextWrapping="Wrap" Text="Some Text" />
</Viewbox>
</Grid>
【讨论】:
我遇到了同样的问题。您可以使用它来resize textblock 的fontsize 以在 overflow 时填充该区域。 p>
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>
【讨论】:
WPF ViewBox 控件可以随其内容增长/收缩到可用空间。
只需将您的 TextBlock 放在 ViewBox 中即可;
<Viewbox Stretch="Uniform" Width="50" Height="50">
<TextBlock Text="Test" />
</Viewbox>
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>
【讨论】:
嗯,它不是一个“完美”的答案,但这是一个快速的 hack(你可以将它放到 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,虽然它的大小适合其文本,但在顶部和底部都有您无法摆脱的填充(无需做一些繁重的工作)。这可能会让你更接近你想要的。
【讨论】:
为确保换行,您需要设置TextBlock 的MaxWidth 和/或MaxHeight
<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."/>
【讨论】: