2

有没有办法在给定的大小、样式等(例如 Courier New、Bold、尺寸 16)?

基本上我需要确定每行n 个字符的 TextBox 的宽度(字体仅在运行时知道,所以我不能简单地对数字进行硬编码)。

找到字符宽度的最佳方法是什么?或者有没有更好的方法来确定文本框的宽度?

4

1 回答 1

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;
于 2012-07-12T07:41:07.743 回答