有没有办法在给定的大小、样式等(例如 Courier New、Bold、尺寸 16)?
基本上我需要确定每行n 个字符的 TextBox 的宽度(字体仅在运行时知道,所以我不能简单地对数字进行硬编码)。
找到字符宽度的最佳方法是什么?或者有没有更好的方法来确定文本框的宽度?
我曾经为字符串编写了一个扩展方法,以根据字体系列、大小等获取其屏幕大小。
public static Size GetScreenSize(this string text, FontFamily fontFamily, double fontSize, FontStyle fontStyle, FontWeight fontWeight, FontStretch fontStretch)
{
fontFamily = fontFamily ?? new TextBlock().FontFamily;
fontSize = fontSize > 0 ? fontSize : new TextBlock().FontSize;
var typeface = new Typeface(fontFamily, fontStyle, fontWeight, fontStretch);
var ft = new FormattedText(text ?? string.Empty, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, fontSize, Brushes.Black);
return new Size(ft.Width, ft.Height);
}
你可以这样使用它:
"Hello World".GetScreenSize(fontFamily, 12, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
您还可以使用默认样式TextBlock
:
"Hello World".GetScreenSize(null, 0, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
您还可以查看extensionmethod.net以获取相同的信息。
编辑:
如果你有一个固定宽度的字体,你可以使用这样的任意字符来计算宽度:
double width = "X".GetScreenSize(fontFamily, 12, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal) * numbersOfCharacters;