WPF XAML中如何实现字体自适应窗口缩放,避免文本撑大主窗口?
解决方案
你当前的Viewbox没有设置宽度上限,布局测量时会优先匹配TextBlock的原始文本宽度,因此会撑大主窗口。只需给Viewbox绑定主窗口的实际宽度作为最大宽度限制,同时显式指定缩放模式即可:
<Viewbox StretchDirection="DownOnly" Stretch="Uniform" MaxWidth="{Binding ActualWidth, ElementName=MyMainWindow}" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid Name="InfoTextOverlay" Visibility="Hidden"> <TextBlock Text="{Binding InfoText, ElementName=MyMainWindow}" Foreground="White" FontSize="40" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </Viewbox>
关键调整说明
- 给Viewbox绑定
MaxWidth为主窗口的ActualWidth,限制Viewbox的最大宽度永远不会超过主窗口实际宽度,从根源上避免撑大窗口 - 显式设置
Stretch="Uniform",保证文本缩放时保持宽高比不变,不会出现文字拉伸变形的问题 - 移除了Grid上冗余的
HorizontalAlignment="Center",该对齐逻辑由外层Viewbox控制即可
如果需要文本距离窗口左右有留白,可以给MaxWidth绑定加值转换器,把主窗口ActualWidth减去固定的边距数值即可。
内容的提问来源于stack exchange,提问作者Joan Venge
相关产品推荐
相关产品推荐

