UIElement.Arrange 메서드

2013-12-13

자식 개체 요소를 배치하고 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에 전달되는 finalRectRect 값으로 Double.NaN 값을 사용할 수 없습니다. 또한 finalRectRect 값으로 무한대 값을 사용할 수 없습니다.

일반적으로 Arrange를 호출하면 각 요소에 대한 DesiredSizeheightwidth 값을 사용하는 finalRect가 통합됩니다. 요소가 레이아웃 부모에 수용할 수 없는 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

Windows Phone

표시:
© 2014 Microsoft