var textSize = GetTextSize(txtSentence.Text,
txtSentence.FontFamily,
txtSentence.FontStyle,
txtSentence.FontWeight,
txtSentence.FontStretch,
txtSentence.FontSize,
txtSentence.MaxWidth,
32);
var textSize = GetTextSize(txtSentenceChinese.Text,
txtSentenceChinese.FontFamily,
txtSentenceChinese.FontStyle,
txtSentenceChinese.FontWeight,
txtSentenceChinese.FontStretch,
txtSentenceChinese.FontSize,
txtSentenceChinese.MaxWidth);
/// <summary>
/// 根据文本获取Text宽高
/// </summary>
/// <param name="text">文本</param>
/// <param name="font_family">字体</param>
/// <param name="font_style">字体样式</param>
/// <param name="font_weight">字体重量</param>
/// <param name="font_stretches">字体横纵比</param>
/// <param name="font_size">字体大小</param>
/// <param name="max_width">最大宽度</param>
/// <param name="line_height">行高</param>
/// <returns></returns>
private Size GetTextSize(string text,
FontFamily font_family,
FontStyle font_style,
FontWeight font_weight,
FontStretch font_stretches,
double font_size,
double max_width = 0,
double line_height = 0)
{
var formattedText = new FormattedText(text,
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface(font_family, font_style, font_weight, font_stretches),
font_size,
Brushes.Black);
if (max_width != 0)
formattedText.MaxTextWidth = max_width;
if (line_height != 0)
formattedText.LineHeight = line_height;
return new Size(formattedText.Width, formattedText.Height);
}
这样可以提前知晓文本在UI中的大小,并提前设置大小。