2015年12月3日木曜日

TextBlock で表示する文字列の幅・高さを求める

TextBlockが置かれている領域のサイズを sizeArea に入れておき
  textBlock.Measure(sizeArea);
としてコールすると
textBlock.DesiredSize にその領域で表示されるサイズが返される。

サンプル
TextBlock を Border 内に配置し、Border内に収まるようにフォントサイズを調整する。
// 最大のフォントサイズ
textBlock.FontSize = 42;

// Borderの領域サイズ
Size    szBorder = new Size(border.ActualWidth, border.ActualHeight);

// 配置したTextBlockのマージンを考慮した表示できる最大の幅
double  MaxWidth = szBorder.Width - (textBlock.Margin.Left + textBlock.Margin.Right);

while (true) {
    textBlock.Measure(szBorder);    // 現在の文字列での表示幅を得る
    if (textBlock.DesiredSize.Width < MaxWidth)
        break;                      // 最大幅よりも小さければOK
    textBlock.FontSize -= 2;        // はみ出しているときはフォントサイズを小さくする
}

高さの値(textBlock.DesiredSize.Height)はあてにならないような...

0 件のコメント:

コメントを投稿