15

2つのTextBlockコントロール(スタック)とその下にある他の要素を含むWPFDataTemplateがあります。レイアウトコードが複雑なため、2つのTextBlock要素の高さを知って、派手なコネクタラインを描画したり、他のコントロールを並べたりできるようにする必要があります。

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

4

5 に答える 5

28

UIElement.Measure(Size)メソッドを呼び出して、プロパティを確認するだけで十分だと思いUIElement.DesiredSizeます。詳細については、提供されているMSDNリンクを確認してください。

于 2010-06-07T10:31:45.497 に答える
2

の呼び出しはUIElement.Measure(Size)、パラメータとして受け取りますSize。2番目の呼び出しは、メソッドに渡したUIElement.DesiredSizeものをすべて返します。SizeMeasure

UIElementTextBlockこの場合)は(まだ)コントロールの子ではないため、これが当てはまると思います。したがってDesiredSize、何かが異なる理由はありません。

于 2011-02-01T21:38:09.723 に答える
1

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

        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は、DesiredSize()結果の制限として機能しているようです。たとえば、msrSize = new Size(10、10)を使用すると、ここではdsrdSizeが{10,10}になります。これが誰かを助けることを願っています。

于 2017-03-07T17:19:44.637 に答える
0
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);
}
于 2017-10-06T11:51:42.540 に答える
0

また、MeasureはUIElementで定義されているため、TextBlockを含む任意のUIElement派生オブジェクトの形状を測定できます。

public static Size ShapeMeasure(UIElement e) {
// Measured Size is bounded to be less than maxSize
Size maxSize = new Size(
     double.PositiveInfinity, 
     double.PositiveInfinity);
e.Measure(maxSize);
return e.DesiredSize;
}
于 2020-05-28T19:33:07.883 に答える