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

FrameworkElement.MeasureOverride メソッド

Silverlight レイアウトの測定パスの動作を提供します。 クラスはこのメソッドをオーバーライドして、独自の測定パス動作を定義できます。

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

protected virtual Size MeasureOverride(
	Size availableSize
)

パラメーター

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

戻り値

型 : System.Windows.Size
子オブジェクトの割り当てサイズの計算、固定コンテナー サイズなど他の考慮事項に基づいて、このオブジェクトでレイアウト時に必要と判断されたサイズ。

このメソッドには、ほとんどの Silverlight FrameworkElement クラスの組み込みレイアウトを実行する既定の実装があります。

内部のレイアウト ロジックまたはアプリケーション コードによってそのメソッドが呼び出されるたびに、MeasureOverride が効果的に、Measure の追加実装を提供します。 配付可能なコンテンツ コントロールを作成する場合は、MeasureOverride ロジックによって、コントロールの特定の測定パスのレイアウト ロジックが定義されます。

継承時の注意

Silverlight (および WPF) の場合、レイアウトで要素のサイズと位置を決定する手法は、測定パスと配置パスの 2 つの手順に分けられます。 この手法の詳細については、「Silverlight のレイアウト システム」を参照してください。

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

  • クラスのレイアウトの一部となっている子オブジェクトの特定のコレクションを反復処理して、各子オブジェクトで Measure を呼び出します。

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

  • 子オブジェクトに必要なサイズの現在の測定に基づいて、親の最終的な必要サイズを計算します。

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

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

次の例では、カスタム パネル実装の測定パス ロジックをカスタマイズするために MeasureOverride を実装しています。 特に、コードに関して次の点に注意してください。

  • 子を反復処理します。

  • それぞれの子に対して、適切な Size を使用して Measure を呼び出します。このサイズは、パネル ロジックで子の数および独自の既知のサイズ制限がどのように処理されるかに基づいて決定します。

  • サイズを返します (この例の場合、この単純なパネルは、測定値を累積して計算されたサイズではなく、固定サイズを返します)。


// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{

    // Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    int i =0;
    foreach (FrameworkElement child in Children)
    {
        if (i < 9)
        {
            child.Measure(new Size(100, 100));
        }
        else
        {
            child.Measure(new Size(0, 0));
        }

        i++;
    }


    // return the size available to the whole panel, which is 300x300
    return new Size(300,300);
}


Silverlight

サポート対象 : 5、4、3

Silverlight for Windows Phone

サポート対象 : Windows Phone OS 7.1、Windows Phone OS 7.0

Silverlight でサポートされるオペレーティング システムの詳細については、「サポートされているオペレーティング システムとブラウザー」を参照してください。

コミュニティの追加

追加
表示:
© 2014 Microsoft