エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

UIElement.Arrange メソッド

2013/12/12

子オブジェクトを配置し、UIElement のサイズを決定します。子要素に対してカスタム レイアウトを実装する親オブジェクトは、それらのレイアウトのオーバーライド実装からこのメソッドを呼び出し、レイアウトを再帰的に更新する必要があります。

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

public void Arrange(
	Rect finalRect
)

パラメーター

finalRect
型: System.Windows.Rect
親がレイアウトの子に対して計算する最終的なサイズ。Rect 値を指定します。

例外条件
InvalidOperationException

finalRectDouble.NaN または無限値が含まれていました。「注釈」を参照してください。

カスタム レイアウト アクションを実行するメソッドをオーバーライドするコンテキストの外部で、Measure または Arrange を呼び出す必要はありません。Windows Phone レイアウトは、実行時に検出されたオブジェクト ツリーとレイアウト関連のプロパティの変更に基づき、独立して動作します。詳細については、「Windows Phone のレイアウト」を参照してください。

Measure に渡す finalRect は、どのような Rect 値に対しても Double.NaN 値を含むことはできません。また、どのような Rect 値に対しても、finalRect が無限値を含むことはできません。

通常、Arrange の呼び出しに含まれる finalRect では、各要素の DesiredSize からの height および width 値が使用されます。ただし、要素に親のレイアウトで受け入れられない DesiredSize が含まれる場合や、すべての子要素の DesiredSize 値の合計が受け入れまたは調整できない値となる場合には、この通常の動作に対して例外的処理が必要となる可能性があります。そのような場合には、子要素のコンテンツがクリップされたり、サイズが変更されたり、またはスクロール領域に配置されたりします。これはすべて、レイアウトの親コンテナーで有効になっている特定の機能によって決まります。

ArrangeOverride の実装内で Arrange を使用する方法を次の例に示します。


// Second arrange all children and return final size of panel
protected override Size ArrangeOverride(Size finalSize)
{
    // Get the collection of children
    UIElementCollection mychildren = Children;

    // Get total number of children
    int count = mychildren.Count;

    // Arrange children
    // We're only allowing 9 children in this panel.  More children will get a 0x0 layout slot.
    int i;
    for (i = 0; i < 9; i++)
    {

        // Get (left, top) origin point for the element in the 3x3 block
        Point cellOrigin = 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.
        double dw = mychildren[i].DesiredSize.Width;
        double dh = mychildren[i].DesiredSize.Height;

        mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));

    }

    // Give the remaining children a 0x0 layout slot
    for (i = 9; i < count; i++)
    {
        mychildren[i].Arrange(new Rect(0, 0, 0, 0));
    }


    // Return final size of the panel
    return new Size(300, 300);
}

// Calculate point origin of the Block you are in
protected Point GetOrigin(int blockNum, int blocksPerRow, Size itemSize)
{
    // Get row number (zero-based)
    int row = (int)Math.Floor(blockNum / blocksPerRow);

    // Get column number (zero-based)
    int column = blockNum - blocksPerRow * row;

    // Calculate origin
    Point origin = new Point(itemSize.Width * column, itemSize.Height * row);
    return origin;

}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2014 Microsoft