• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WPF C# TextBlock 高さ取得)

WPF C# TextBlockの高さ取得方法と問題の対処法

このQ&Aのポイント
  • WPFでTextBlockの高さを取得する方法と対処法について説明します。StackPanelにTextBlockを追加し、WrapをTrueに設定していますが、TextBlock.RenderSize.Heightで取得すると想定している高さと異なる値が返されます。実際の文字の表示がStackPanelの高さ内に収まっているのにも関わらず、TextBlockの高さが設定した値よりも小さい場合、改行が原因で高さが異なる可能性があります。そのため、一度TextBlock.RenderSize.Height * textBlock.Inlines.Countで計算してみましたが、改行がある場合は実際の高さと異なる結果が返されました。適切な高さを取得する方法として、TextBlockの実際の表示領域を測定する方法があります。
  • TextBlockの高さを取得する方法として、TextBlockにコンテンツを追加し終わった後にTextBlockのRenderSizeを取得することが一般的ですが、WrapがTrueの場合、改行があると高さを正確に取得することができません。それに加えて、TextBlockの高さがStackPanelの高さより小さい場合、改行の影響も考慮する必要があります。
  • TextBlockの高さを正確に取得するためには、TextBlockのMeasureメソッドとArrangeメソッドを利用する方法があります。MeasureメソッドでTextBlockのサイズを計算し、Arrangeメソッドで実際の表示領域を指定します。これにより、WrapがTrueの場合でも正確な高さを取得することができます。また、TextBlockの高さがStackPanelの高さよりも小さい場合は、StackPanelの高さを基準にTextBlockの高さを自動調整する方法もあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

おそらく、textBlock.ActualHeightかと思われます。 RenderSizeのドキュメントを読むと、RdnderSizeを使うシチュエーションは限られていそうで、通常はActual***を用いるとあるためです。 http://msdn.microsoft.com/ja-jp/library/system.windows.uielement.rendersize(v=vs.95).aspx この時、気をつけなければならないのは、ActualHeightの更新契機です。以下のURLが参考になるかと存じます。 http://csfun.blog49.fc2.com/blog-entry-41.html

pokeman-v
質問者

お礼

ご回答ありがとうございます。 感激です! すぐに解決いたしました! また宜しくお願いします。