如何(以编程方式)设置WPF TextBlock
中Canvas
的字体大小?
文本大小应相对于画布尺寸,以使其居中。
这适用于我的本地机器,但显示在更大的屏幕上,文本被中途切断。
double fontSize = TickerOverlay.Height / 2.5;
有没有一种简单的方法可以做到这一点,所以如果画布尺寸增加(比如在更大的分辨率屏幕上显示),文本仍然会居中?
答案 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;
}
}