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

FrameworkElement.ArrangeOverride メソッド

2013/12/12

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

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

'宣言
Protected Overridable Function ArrangeOverride ( _
	finalSize As Size _
) As Size

パラメーター

finalSize
型: System.Windows.Size
このオブジェクトがオブジェクト自体と子を配置するために使用する親の末尾の領域。

戻り値

型: System.Windows.Size
要素がレイアウトに配置された後に使用される実際のサイズ。

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

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

継承時の注意

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

レイアウト処理の配置パスをカスタマイズするコントロール作成者 (またはパネル作成者) は、ArrangeOverride をオーバーライドする必要があります。実装パターンでは、表示可能な各子オブジェクトの Arrange を呼び出して、各子オブジェクトの最終的な必要サイズを finalRect パラメーターとして渡します。表示される子オブジェクトを含むコンテナーでは、各子オブジェクトの Arrange を呼び出す必要があります。呼び出さない場合は、子オブジェクトが描画されません。

複数の既存の非シール Windows Phone クラスは、このメソッドのオーバーライド実装を提供します。次がその代表的な例です。StackPanel.ArrangeOverride および Grid.ArrangeOverride

通常、ArrangeOverride の動作によって、レイアウト コンテナー自体に割り当てられたユーザー定義の値に違反しない finalSize が生成されます。たとえば、finalSize は通常、コンテナーの Height および Width より大きくなることはありません。これは、コンテンツ領域に影響する Margin または Padding 値が考慮されるためです。特にコンテナーのサイズを超えた場合のシナリオを持つコントロールでは、より大きな値を返すことができますが、それにより生じるクリッピングと配置の問題を考慮する必要があります。

一般に、ArrangeOverride の実装で、各子オブジェクトに対して Arrange に渡される値は、そのオブジェクトに対する前の測定パスで DesiredSize に設定された値です。ただし、コンテナーによって有効になる特定のレイアウト機能によっては、値が異なる場合もあります。

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

  • 子を反復処理します。

  • それぞれの子に対して、Rect を使用して Arrange を呼び出します。ここで、Height および WidthDesiredSize に基づき、X および Y はパネルに固有のロジックに基づきます。

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


'Second arrange all children and return final size of panel 
Protected Overloads Overrides Function ArrangeOverride(ByVal finalSize As Size) As Size
    'Get the collection of children 
    Dim mychildren As UIElementCollection = Children

    'Get total number of children 
    Dim count As Integer = mychildren.Count

    'Arrange children 
    'We're only allowing 9 children in this panel. More children will get a 0x0 layout slot. 
    Dim i As Integer
    For i = 0 To 8

        'Get (left, top) origin point for the element in the 3x3 block 
        Dim cellOrigin As Point = GetOrigin(i, 3, New Size(100, 100))

        'Arrange child 
        'Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride. 
        Dim dw As Double = mychildren(i).DesiredSize.Width
        Dim dh As Double = mychildren(i).DesiredSize.Height


        mychildren(i).Arrange(New Rect(cellOrigin.X, cellOrigin.Y, dw, dh))
    Next
    For i = 9 To count - 1

        'Give the remaining children a 0x0 layout slot 
        mychildren(i).Arrange(New Rect(0, 0, 0, 0))
    Next


    'Return final size of the panel 
    Return New Size(300, 300)
End Function

'Calculate point origin of the Block you are in 
Protected Function GetOrigin(ByVal blockNum As Integer, ByVal blocksPerRow As Integer, ByVal itemSize As Size) As Point
    'Get row number (zero-based) 
    Dim row As Integer = CInt(Math.Floor(blockNum / blocksPerRow))

    'Get column number (zero-based) 
    Dim column As Integer = blockNum - blocksPerRow * row

    'Calculate origin 
    Dim origin As New Point(itemSize.Width * column, itemSize.Height * row)
    Return origin

End Function


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: