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;
}
}
如何(以编程方式)在 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;
}
}