정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

UIElement.Measure 메서드

업데이트: 2007년 11월

UIElementDesiredSize를 업데이트합니다. 부모 요소는 이 메서드를 자체 MeasureCore 구현에서 호출하여 재귀적 레이아웃 업데이트를 형성합니다. 이 메서드를 호출하면 레이아웃 업데이트의 첫 번째 처리 단계("측정" 처리 단계)가 구성됩니다.

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

public void Measure(
	Size availableSize
)
public void Measure(
	Size availableSize
)
public function Measure(
	availableSize : Size
)
XAML에서 메서드를 사용할 수 없습니다.

매개 변수

availableSize
형식: System.Windows.Size

부모 요소가 자식 요소에 할당할 수 있는 공간입니다. 자식 요소는 사용 가능한 것보다 큰 공간을 요청할 수 있습니다. 현재 요소의 콘텐츠 모델에서 스크롤이 가능한 경우에는 제공되는 공간이 조정될 수 있습니다.

WPF(Windows Presentation Foundation)에서 레이아웃 배치를 계산하는 작업은 Measure 호출 및 Arrange 호출로 구성됩니다. Measure 호출 중에 요소는 availableSize 입력을 사용하여 해당 크기 요구 사항을 결정합니다. 그리고 Arrange 호출 중에 요소 크기가 확정됩니다.

availableSize는 0에서 무한대까지의 어떤 수든 가능합니다. 레이아웃에 관여되는 요소는 지정된 availableSize에 대해 필요로 하는 최소 Size를 반환해야 합니다.

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

레이아웃 업데이트는 비동기적으로 수행되므로 주 스레드가 가능한 모든 레이아웃이 변경되도록 기다리지 않습니다. 속성 값의 코드 숨김 확인을 통해 요소를 쿼리하면 Width 속성 등의 크기 조정 또는 레이아웃 특성과 상호 작용하는 속성에 변경 내용이 즉시 반영되지 않을 수 있습니다.

참고:

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


전체 샘플을 보려면 간단한 사용자 지정 패널 만들기 샘플을 참조하십시오.

Windows Vista

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

.NET Framework

3.5, 3.0에서 지원

커뮤니티 추가 항목

표시:
© 2014 Microsoft