WPF 中的响应式 TextSize

Responsive TextSize in WPF

如何(以编程方式)在 WPF Canvas 中设置 TextBlock 的字体大小?

文本大小应相对于 canvas 尺寸,以便居中。

这适用于我的本地机器,但在更大的屏幕上显示时,文本被截断了一半。 double fontSize = TickerOverlay.Height / 2.5;

有没有一种简单的方法可以做到这一点,以便如果 canvas 尺寸增加(比如,显示在更大分辨率的屏幕上),文本仍然会居中?

您不需要设置字体大小。将您的 canvas 包裹在 ViewBox 中,它应该可以正常工作。

ViewBox 是一个控件,可以缩放其中的任何内容以适应其可用 space。因此,如果您按应有的方式设置 canvas,它会根据分辨率放大或缩小。

在模型视图控制器布局中执行此操作的正确方法是由视图处理(在本例中 XAML)。 WPF 有一个组件 ViewBox,非常适合这种情况。

<Grid>
    <Viewbox HorizontalAlignment="Center" Grid.Row="1" VerticalAlignment="Center" Height="50">
        <TextBlock Margin="10 0 10 0">Hello World</TextBlock>
    </Viewbox>
</Grid>

视图框会自动扩展以填满所有可用的 space 并设置适合的字体。高度是您设置最大字体大小的方式,但如果达到 100%,它会缩小。使用边距确保它不会超出页面范围。

首先,您应该使用TickerOverlay 的ActualHeight 而不是Height。会实时给出真实身高。

其次,您可以监听您的 TickerOverlay 的 SizeChanged,并在事件处理程序中更新您的文本的字体大小。

您可以在 xaml 中订阅加载事件,如下所示:

<TextBlock Loaded="TextBlock_Loaded"/>

并且,在代码隐藏中你更新它,像这样:

private void TextBlock_Loaded(object sender, RoutedEventArgs e)
{
    var myTextBlock = sender as TextBlock;
    if(myTextBlock != null)
    {
        myTextBlock.FontSize = TickerOverlay.Height / 2.5;
    }
}