내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

FrameworkElement.ArrangeOverride 메서드

2013-12-13

Windows Phone 레이아웃의 정렬 처리 단계에 대한 동작을 제공합니다. 클래스는 이 메서드를 재정의하여 자체 정렬 처리 단계 동작을 정의할 수 있습니다.

Namespace:  System.Windows
어셈블리:  System.Windows(System.Windows.dll)

protected virtual Size ArrangeOverride(
	Size finalSize
)

매개 변수

finalSize
형식: System.Windows.Size
이 개체가 개체 자신과 자식을 정렬하는 데 사용해야 하는 부모 내 마지막 영역입니다.

반환 값

형식: System.Windows.Size
레이아웃에서 요소가 정렬된 후 사용되는 실제 크기입니다.

이 메서드에는 대부분의 Windows Phone FrameworkElement 파생 클래스에 대해 기본 제공 레이아웃을 수행하는 기본 구현이 있습니다.

ArrangeOverride는 내부 레이아웃 논리 또는 응용프로그램 코드에서 해당 메서드를 호출할 때마다 Arrange에 대한 추가 구현을 제공합니다. 배포 가능한 콘텐츠 컨트롤을 생성하는 경우 ArrangeOverride 논리는 컨트롤의 특정 정렬 처리 단계 레이아웃 논리를 정의합니다.

상속자 참고 사항

Windows Phone의 경우 레이아웃에서의 요소 크기 조정 및 배치 작업이 측정 처리 단계와 정렬 처리 단계의 두 단계로 나뉘어 수행됩니다. 이 방법에 대해서는 Windows Phone의 레이아웃 항목에서 자세히 설명합니다.

레이아웃 처리의 정렬 처리 단계를 사용자 지정하려는 컨트롤 작성자나 패널 작성자는 ArrangeOverride 메서드를 재정의해야 합니다. 이 패턴으로 구현하면 각각의 표시되는 자식 개체에서 Arrange가 호출되며 각 자식 개체에 대해 원하는 최종 크기가 finalRect 매개 변수로 전달됩니다. 표시되는 자식 개체를 포함하는 컨테이너는 각 자식 개체에서 Arrange를 호출해야 하며, 그렇지 않으면 자식 개체가 렌더링되지 않습니다.

기존의 몇 가지 봉인되지 않은 Windows Phone 클래스는 이 메서드의 재정의 구현을 제공합니다. 주요 구현에는 다음이 포함됩니다. StackPanel.ArrangeOverrideGrid.ArrangeOverride.

일반적으로 ArrangeOverride의 동작은 레이아웃 컨테이너 자체에 지정된 사용자 정의 값을 위반하지 않는 finalSize를 생성합니다. 예를 들어, 콘텐츠 영역에 영향을 미치는 Margin 또는 Padding 값을 고려하여 finalSize는 일반적으로 컨테이너의 HeightWidth보다 크지 않습니다. 특히 컨테이너 크기를 초과하는 시나리오를 갖는 컨트롤은 더 큰 값을 반환할 수 있지만, 클리핑 및 위치 지정에서 발생하는 문제를 고려해야 합니다.

ArrangeOverride 구현에서 각 자식 개체에 대해 Arrange로 전달하는 값은 일반적으로 해당 개체의 이전 측정 처리 단계에서 DesiredSize에 설정된 값입니다. 하지만 이 값은 컨테이너에서 사용하는 특정 레이아웃 기능에 따라 달라질 수 있습니다.

다음 예제에서는 ArrangeOverride를 구현하여 사용자 지정 패널 구현에 대한 정렬 처리 단계 논리를 사용자 지정합니다. 특히 코드의 다음 측면을 확인합니다.

  • 자식에 대해 반복됩니다.

  • 각 자식에 대해 Rect를 사용하여 Arrange를 호출합니다. 여기서 HeightWidthDesiredSize를 기반으로 하고, XY는 패널과 관련된 논리를 기반으로 합니다.

  • 해당 크기를 반환합니다. 이 경우 이 단순한 패널은 정렬된 Rect 값 치수를 집계할 때 계산된 크기 대신 고정 크기를 반환합니다.


// 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