是否有任何方法可以在给定的固定宽度字体中找到给定大小,样式等的字符宽度(字符开头到下一个字符开头之间的距离)(例如Courier New ,大胆,大小16)?
基本上我需要确定每行 n 字符的TextBox宽度应该是什么(Font只在运行时已知,所以我不能简单地对数字进行硬编码)。
找到角色宽度的最佳方法是什么?或者有更好的方法来确定TextBox的宽度吗?
答案 0 :(得分:5)
我曾经为字符串编写了一个扩展方法,以根据字体系列,大小等来获取其屏幕大小。
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;