情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

FrameworkElement.MeasureOverride メソッド

2013/12/12

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

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)

'宣言
Protected Overridable Function MeasureOverride ( _
	availableSize As Size _
) As Size

パラメーター

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

戻り値

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

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

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

継承時の注意

Windows Phone の場合、レイアウトで要素のサイズと位置を決定する手法は、次の 2 つの手順に分けられます: 測定パスと配置パス。この手法の詳細については、「Windows Phone のレイアウト」を参照してください。

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

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

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

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

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

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

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

  • 子を反復処理します。

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

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


'First measure all children and return available size of panel 
Protected Overloads Overrides Function MeasureOverride(ByVal availableSize As Size) As Size

    'Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    Dim i As Integer = 0
    For Each child As FrameworkElement In Children
        If i < 9 Then
            child.Measure(New Size(100, 100))
        Else
            child.Measure(New Size(0, 0))
        End If

        i += 1
    Next


    'return the size available to the whole panel, which is 300x300 
    Return New Size(300, 300)
End Function


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: