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

FrameworkElement.MeasureOverride メソッド

派生クラスでオーバーライドされると、子要素に必要なレイアウトのサイズを測定し、FrameworkElement 派生クラスのサイズを決定します。

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

protected virtual Size MeasureOverride(
	Size availableSize
)

パラメーター

availableSize
型 : System.Windows.Size
このオブジェクトが子要素に割り当てることのできる使用可能サイズ。 値として無限大を指定し、この要素があらゆるコンテンツにサイズを合わせられるようにすることができます。

戻り値

型 : System.Windows.Size
子要素のサイズ計算に基づいて、レイアウト過程でこの要素が必要であると判断するサイズ。

要素の Windows Presentation Foundation (WPF) レイアウト システムでのカスタム レイアウト サイズ変更動作を実装するには、MeasureOverride をオーバーライドします。 実装では次の処理を行う必要があります。

  1. 要素のレイアウトの一部となっている子の特定のコレクションを反復処理して、各子要素で Measure を呼び出します。

  2. そのまま子の DesiredSize を取得します (この値は Measure の呼び出し後にプロパティとして設定されます)。

  3. 子要素の測定に基づいて親の最終的な必要サイズを計算します。

MeasureOverride の戻り値は要素自身の必要サイズであり、この値がさらに、現在の要素の親要素の測定の入力になります。 ページのルート要素に到達するまでこの同じプロセスがレイアウト システムで繰り返されます。

このプロセスの間に、最初の availableSize より大きなサイズの DesiredSize が子要素から返される場合があります。これは、その子要素により多くの領域が必要であることを示します。 この場合は、スクロール可能な領域を導入する、親コントロールのサイズを変更する、何らかのスタック順序を確立するなど、コンテンツの測定や配置のためのあらゆる方法を使用して対処することができます。

重要 : 重要

要素では、このプロセスの間に各子要素で Measure を呼び出す必要があります。各子要素で呼び出さないと、子要素のサイズ設定や配置は行われません。

継承時の注意

次のコードは、コンパイルこの実装パターンを示します。VisualChildren は、独自の要素を定義する必要がある子の列挙可能なコレクション プロパティを表します。 このプロパティの名前には、何でも指定できます。 VisualChildren はこの例のためのプレースホルダー名であり、VisualChildren は WPF によって提供される API や名前付けパターンの一部ではありません。


protected override Size MeasureOverride(Size availableSize)
{
    Size desiredSize = new Size();
    foreach (UIElement child in VisualChildren)
    {
        child.Measure(availableSize);
        // do something with child.DesiredSize, either sum them directly or apply whatever logic your element has for reinterpreting the child sizes
        // if greater than availableSize, must decide what to do and which size to return
    }
    // desiredSize = ... computed sum of children's DesiredSize ...;
    // IMPORTANT: do not allow PositiveInfinity to be returned, that will raise an exception in the caller!
    // PositiveInfinity might be an availableSize input; this means that the parent does not care about sizing
    return desiredSize;
}


この例では、Panel 要素の既定のレイアウト動作をオーバーライドして、Panel から派生したカスタム レイアウト要素を作成する方法を示します。

この例では、PlotPanel という単純なカスタム Panel 要素を定義します。この要素は、ハードコーディングされた x 座標および y 座標に従って子要素を配置します。 この例では、x および y をどちらも 50 に設定します。そのため、すべての子要素は x 座標および y 座標上のこの位置に配置されます。

カスタムの Panel 動作を実装するために、この例では MeasureOverride メソッドと ArrangeOverride メソッドを使用します。 各メソッドは、子要素の配置とレンダリングに必要な Size データを返します。


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.5.2、4.5.1、4.5、4、3.5、3.0

.NET Framework Client Profile

サポート対象 : 4、3.5 SP1

Windows Phone アプリ用 .NET

サポート対象 : Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)

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

コミュニティの追加

追加
表示:
© 2014 Microsoft