WPFがレンダリングされる前に、WPFのテキストブロックのサイズを測定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2988622

  •  24-10-2019
  •  | 
  •  

質問

2つのテキストブロックコントロール(積み重ねられた)を備えたWPF DateTemplateがあり、その後いくつかの他の要素があります。複雑なレイアウトコードのため、2つのテキストブロック要素の高さを知る必要があります。これにより、派手なコネクタラインを描き、他のコントロールなどを並べることができます。

テキストブロックに入っているテキストを知っていて、フォントなどを知っている場合、実際にレンダリングせずにこれらのテキストブロックの高さを計算または測定できる方法はありますか?

役に立ちましたか?

解決

電話するだけで十分だと思います UIElement.Measure(Size) メソッドとその後、を確認します UIElement.DesiredSize 財産。詳細については、提供されたMSDNリンクを確認してください。

他のヒント

通話 UIElement.Measure(Size), 、パラメーターとして取得します Size. 。 2回目の呼び出し UIElement.DesiredSize 何でも返します Size あなたはに渡りました Measure 方法。

私はこれが事実だと思います UIElement (TextBlock この場合、)は(まだ)コントロールの子供ではないため、 DesiredSize 何も違う理由はありません。

これはかなり古い質問であることを感謝していますが、次のコードを使用していることがわかりました

        TextBlock textBlock = new TextBlock();
        textBlock.Text = "NR valve";
        Size msrSize = new Size(100, 200);
        textBlock.Measure(msrSize);
        Size dsrdSize = textBlock.DesiredSize;

dsrdsizeは{47.05,15.96}として返されます。トリックは、MSRSizeを予想される実際のサイズよりも大きくするようです。 msrsizeは、希望の結果の制限として機能するようです。たとえば、msrsize = new Size(10、10)を使用すると、ここで{10,10}のdsrdsizeが生成されます。これが誰かを助けることを願っています。

public static Size ShapeMeasure(TextBlock tb) {
    // Measured Size is bounded to be less than maxSize
    Size maxSize = new Size(
         double.PositiveInfinity, 
         double.PositiveInfinity);
    tb.Measure(maxSize);
    return tb.DesiredSize;
}

public static Testit() 
{
    TextBlock textBlock = new TextBlock();
    textBlock.Text = "NR valve";

    Size text size = ShapeMeasure(textBlock);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top