Мы используем следующий вспомогательный класс для выполнения простых текстовых измерений в WPF:
public static class TextUtilities
{
public static Size MeasureText(string text,
FontFamily family, double size, FontStyle style, FontWeight weight, FontStretch stretch, TextFormattingMode formattingMode)
{
FormattedText formattedText = new FormattedText(
text,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(family, style, weight, stretch),
size,
Brushes.Black,
null,
formattingMode);
return new Size(formattedText.Width, formattedText.Height);
}
public static Size MeasureText(string text, TextBlock textBlock)
{
return MeasureText(text,
textBlock.FontFamily,
textBlock.FontSize,
textBlock.FontStyle,
textBlock.FontWeight,
textBlock.FontStretch,
TextOptions.GetTextFormattingMode(textBlock));
}
public static Size MeasureText(string text, Control control)
{
return MeasureText(text, control.FontFamily, control.FontSize,
control.FontStyle, control.FontWeight, control.FontStretch,
TextOptions.GetTextFormattingMode(control));
}
}
Может быть, ваш монитор имеет более высокое разрешение, чем 96dpi? WPF является независимым от разрешения, но «графика» - нет, это может объяснить разницу. Поскольку я не уверен в этом, я просто оставляю это как комментарий, а не ответ. –
Возможно, это может помочь? http://stackoverflow.com/questions/632445/measuring-text-in-wpf – series0ne