エクスポート (0) 印刷
すべて展開
展開 最小化
この記事は翻訳者によって翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。
訳文
原文

UIElement.Measure メソッド

UIElement DesiredSize を更新します。 親要素はそれぞれの MeasureCore 実装からこのメソッドを呼び出し、レイアウトを再帰的に更新します。 このメソッドの呼び出しにより、レイアウト更新の最初のパス ("測定" パス) が構成されます。

名前空間:  System.Windows
アセンブリ:  PresentationCore (PresentationCore.dll 内)

public void Measure(
	Size availableSize
)

パラメーター

availableSize
型: System.Windows.Size
親要素が子要素を割り当てることができる、使用可能な領域。 子要素は、使用可能な領域よりも広い領域を要求できます。現在の要素のコンテンツ モデルでスクロールが可能な場合は、要求されたサイズが受け入れられることがあります。

Windows Presentation Foundation (WPF) では、レイアウト位置の計算は Measure 呼び出しと Arrange 呼び出しによって行われます。 Measure の呼び出し中には、availableSize の入力値を使用して、要素がそのサイズ要件を判断します。 Arrange の呼び出し中に、要素の最終サイズが決定されます。

availableSize には、ゼロから無限大までの任意の数値を指定できます。 レイアウトに関係する要素は、指定された availableSize に対して必要な Size の最小値を返します。

レイアウトは、初めてインスタンス化されると、必ず Arrange 呼び出しの前に Measure 呼び出しを受け取ります。 しかし、最初のレイアウト パスの後に、Measure 呼び出しを受け取らずに Arrange 呼び出しを受け取る場合があります。これは、Arrange だけに影響するプロパティ (配置など) が変更された場合や、親が Measure を受け取らずに Arrange を受け取った場合に発生する可能性があります。 Measure 呼び出しは、自動的に Arrange 呼び出しを無効化します。

レイアウトの更新は非同期に行われ、メイン スレッドがあらゆるレイアウトの変更を待機することはありません。 プロパティ値の分離コード チェックによって要素を照会しても、サイズ設定やレイアウト特性を処理するプロパティ (Width プロパティなど) の変更が直ちに反映されない場合があります。

メモメモ

UpdateLayout メソッドを使用すると、レイアウトの更新を強制的に実行できますが、 このメソッドの呼び出しは通常不要であり、パフォーマンスの低下を招く可能性があります。

レイアウト システムは、無効なレイアウトに関する 2 つの異なるキューを保持しています。1 つは Measure 用、もう 1 つは Arrange 用です。 レイアウト キューは、レイアウトを実行する要素のビジュアル ツリー内の要素の順序に基づいて並べ替えられます。親が繰り返し変更されることによってレイアウト処理を無駄に繰り返す必要がないように、ツリーの上位にある要素がキューの先頭に配置されます。 重複するエントリはキューから自動的に削除され、既にレイアウトが有効になった要素もキューから自動的に削除されます。

レイアウトを更新すると、まず Measure キューが空になり、続いて Arrange キューが空になります。 Measure キューに要素が存在する場合、Arrange キューの要素は並べ替えられません。

This example shows how to override the default layout behavior of the Panel element and create custom layout elements that are derived from Panel.

The example defines a simple custom Panel element called PlotPanel, which positions child elements according to two hard-coded x- and y-coordinates. In this example, x and y are both set to 50; therefore, all child elements are positioned at that location on the x and y axes.

To implement custom Panel behaviors, the example uses the MeasureOverride and ArrangeOverride methods. Each method returns the Size data that is necessary to position and render child elements.


public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}


.NET Framework

サポート対象: 4、3.5、3.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

コミュニティの追加

追加
表示:
© 2014 Microsoft