내보내기(0) 인쇄
모두 확장
확장 최소화
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

UIElement.Arrange 메서드

자식 요소를 배치하고 UIElement의 크기를 결정합니다. 부모 요소는 이 메서드를 ArrangeCore 구현 또는 이에 해당하는 WPF 프레임워크 수준 구현에서 호출하여 재귀적 레이아웃 업데이트를 형성합니다. 이 메서드는 두 번째 레이아웃 업데이트 단계를 구성합니다.

네임스페이스:  System.Windows
어셈블리:  PresentationCore(PresentationCore.dll)

public void Arrange(
	Rect finalRect
)

매개 변수

finalRect
형식: System.Windows.Rect
Rect 인스턴스로 제공되는, 자식 요소에 대해 부모가 계산하는 최종 크기입니다.

WPF 프레임워크 수준 요소 파생 시나리오의 경우 Arrange의 동작은 변경해서는 안 되며 섀도를 적용하는 경우가 아니면 변경할 수도 없습니다. 대신 클래스에서 ArrangeOverride 구현을 재정의해야 합니다. ArrangeOverride 구현은 기본 WPF 프레임워크 수준 레이아웃 작업의 일부분으로 Arrange에서 내부적으로 호출합니다. 또한 ArrangeCore 구현은 자식 요소가 있는 경우 각 자식 요소에서 ArrangeOverride를 호출해야 합니다.

WPF 핵심 수준 요소 파생 시나리오의 경우 Arrange의 동작은 변경해서는 안 되며 섀도를 적용하는 경우가 아니면 변경할 수도 없습니다. 대신 클래스에서 ArrangeCore를 재정의해야 합니다. ArrangeCore 구현은 기본 WPF 프레임워크 수준 레이아웃 작업의 일부분으로 Arrange에서 내부적으로 호출합니다. 이 과정에서는 사용자가 WPF 프레임워크 수준 레이아웃 및 해당 레이아웃 시스템을 사용하는 것으로 가정하지만, UIElement 기본 요소 클래스의 WPF 핵심 수준에서만 요소를 파생하는 경우에는 이를 사용하지 않는 경우가 많습니다. 또한 ArrangeCore 구현은 자식 요소가 있는 경우 각 자식 요소에서 Arrange를 호출해야 합니다. WPF 핵심 수준 시나리오에서는 FrameworkElement 파생 클래스를 사용하지 않는다고 가정합니다. 이는 FrameworkElementArrangeCore를 봉인하기 때문입니다.

WPF(Windows Presentation Foundation)에서 WPF 프레임워크 수준 레이아웃 배치를 계산하는 작업은 Measure 호출 및 Arrange 호출로 구성됩니다. Measure 호출 중에 레이아웃 시스템은 제공된 Size(availableSize) 인수를 사용하여 요소의 크기 요구 사항을 결정합니다. Arrange 호출 중에 레이아웃 시스템은 요소 경계 상자의 크기와 위치를 종결합니다. 자세한 내용은 레이아웃을 참조하십시오.

availableSize는 0에서 무한대까지의 어떤 수든 가능합니다. 레이아웃을 지정할 요소는 availableSize 매개 변수를 통해 필요로 하는 최소 Size를 반환합니다.

레이아웃을 처음 인스턴스화하면 항상 Arrange 전에 Measure 호출을 받습니다. 그러나 첫 번째 레이아웃 과정 이후에 레이아웃은 Measure 없이 Arrange 호출을 받을 수 있습니다. 이는 Arrange에만 영향을 주는 맞춤 등의 속성이 변경되거나 부모가 Measure 없이 Arrange를 받는 경우에 발생할 수 있습니다. Measure 를 호출하면 Arrange 호출이 자동으로 무효화됩니다.

레이아웃 업데이트는 대개 레이아웃 시스템에서 결정하는 시간에 비동기적으로 발생합니다. 요소에는 Width 등의 요소 크기 조정에 영향을 주는 속성에 대한 변경 내용이 즉시 반영되지 않을 수 있습니다.

참고참고

레이아웃 업데이트는 UpdateLayout 메서드를 사용하여 강제 적용할 수 있지만, 이 함수는 대개 불필요하며 성능을 저하시킬 수 있으므로 호출하지 않는 것이 좋습니다. UpdateLayout 을 호출하는 것이 적절한 상황에서는 레이아웃 시스템에서 이미 업데이트를 처리 중인 경우가 많습니다. 레이아웃 시스템에서는 패키지의 일부로 필요한 업데이트를 모두 최적화하는 방식으로 레이아웃 변경 내용을 처리할 수 있습니다.

레이아웃 시스템에는 Measure에 대해 하나, 그리고 Arrange에 대해 하나 등과 같이 잘못된 레이아웃에 대해 두 개의 큐가 별도로 유지됩니다. 레이아웃 큐는 시각적 트리에 있는 요소의 순서를 기준으로 정렬됩니다. 부모에서 변경 내용이 반복되어 레이아웃이 중복되지 않도록 하기 위해 트리에서 상위 수준의 요소는 큐의 맨 위에 배치됩니다. 중복 항목은 큐에서 자동으로 제거되고 이미 유효한 상태의 요소도 큐에서 자동으로 제거됩니다.

레이아웃을 업데이트할 때는 Measure 큐를 먼저 비우고 그 다음에 Arrange 큐를 비웁니다. Arrange 큐의 요소는 Measure 큐에 요소가 있는 경우 정렬되지 않습니다.

이 예제에서는 Panel 요소의 기본 레이아웃 동작을 재정의하고 Panel에서 파생된 사용자 지정 레이아웃 요소를 만드는 방법을 보여 줍니다.

예제에서는 두 개의 하드 코드된 x 및 y 좌표에 따라 자식 요소를 배치하는 PlotPanel이라는 간단한 사용자 지정 Panel 요소를 정의합니다. 이 예제에서 xy는 모두 50으로 설정되므로 모든 자식 요소는 x 및 y 축에서 해당 위치에 배치됩니다.

사용자 지정 Panel 동작을 구현하기 위해 예제에서는 MeasureOverrideArrangeOverride 메서드를 사용합니다. 각 메서드는 자식 요소를 배치하고 렌더링하는 데 필요한 Size 데이터를 반환합니다.


public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}


.NET Framework

4.5, 4, 3.5, 3.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework 에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 다음을 참조하십시오. .NET Framework 시스템 요구 사항.

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft