WPF中的响应式TextSize

时间:2015-05-20 13:46:29

标签: wpf wpf-controls

如何(以编程方式)设置WPF TextBlockCanvas的字体大小?

文本大小应相对于画布尺寸,以使其居中。

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

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

4 个答案:

答案 0 :(得分:5)

在模型视图控制器布局中执行此操作的正确方法是由视图处理(在本例中为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>

视图框会自动展开以填充所有可用空间并设置适合的字体。高度是您设置最大字体大小的方式,但如果达到100%则会缩小。使用保证金确保它不会离开页面。

答案 1 :(得分:1)

您无需设置字体大小。将画布包裹在ViewBox中,它应该可以正常工作。

ViewBox是一个控件,可以缩放其中的任何内容以适应它的可用空间。因此,如果你按原样设置了画布,它会根据分辨率向上或向下缩放。

答案 2 :(得分:0)

首先,您应该使用TickerOverlay的ActualHeight而不是Height。它会实时提供真正的高度。

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

答案 3 :(得分:0)

您可以在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;
    }
}