确定合适字体大小的最佳方法是测量任意大小的文本,然后乘以它的大小与区域大小的比率。
例如,如果您测量文本并且它是它所在容器大小的一半,您可以将它乘以 2,它应该会填满容器。您想选择要使用的宽度或高度比中的最小值。
在 WPF 中,FormattedText 类进行文本测量。
public double GetFontSize(string text, Size availableSize, Typeface typeFace)
{
FormattedText formtxt = new FormattedText(text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeFace, 10, Brushes.Black);
double ratio = Math.Min(availableSize.Width / formtxt.Width, availableSize.Height / formtxt.Height);
return 10 * ratio;
}
每当您更改 TextBlocks 的文本时,您都会使用此功能,如下所示:
txtBlock.FontSize = GetFontSize(txt.Text, new Size(txt.ActualWidth, txt.ActualHeight), new Typeface(txt.FontFamily, txt.FontStyle, txt.FontWeight, txt.FontStretch));
编辑:
出于实用性的目的,您可能希望能够让文本在这个预定义的边界矩形中垂直居中。一个很好的方法是将 TextBlock 包装在另一个对象中,例如 Border 元素。通过这种方式,您可以告诉 TextBlock 在边框的中心对齐,并且可以自动调整大小以适合其内容。