特定のサイズ、スタイルなどの特定の固定幅フォントで文字の幅(文字の先頭から次の文字の先頭までの距離)を見つける方法はありますか(例:Courier New、Bold、サイズ16)?
基本的に、1行あたりn文字のTextBoxの幅を決定する必要があります(フォントは実行時にのみ認識されるため、数値を単純にハードコーディングすることはできません)。
文字の幅を見つけるための最良の方法は何ですか?または、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;