在给定尺寸,样式等的情况下,有没有办法找到固定宽度字体的字符宽度?

时间:2012-07-12 07:33:07

标签: c# wpf fonts textbox

是否有任何方法可以在给定的固定宽度字体中找到给定大小,样式等的字符宽度(字符开头到下一个字符开头之间的距离)(例如Courier New ,大胆,大小16)?

基本上我需要确定每行 n 字符的TextBox宽度应该是什么(Font只在运行时已知,所以我不能简单地对数字进行硬编码)。

找到角色宽度的最佳方法是什么?或者有更好的方法来确定TextBox的宽度吗?

1 个答案:

答案 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;