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 件のコメント:
コメントを投稿