다음을 통해 공유


UIElement.Measure(Size) 메서드

정의

UIElementDesiredSize를 업데이트. 일반적으로 레이아웃 자식에 대한 사용자 지정 레이아웃을 구현하는 개체는 자체 MeasureOverride 구현에서 이 메서드를 호출하여 재귀 레이아웃 업데이트를 형성합니다.

public:
 virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)

매개 변수

availableSize
Size

부모가 자식 개체에 할당할 수 있는 사용 가능한 공간입니다. 자식 개체는 사용 가능한 것보다 더 큰 공간을 요청할 수 있습니다. 특정 컨테이너에서 스크롤 또는 다른 크기 조정 동작이 가능한 경우 제공된 크기를 수용할 수 있습니다.

예제

이 예제에서는 MeasureOverride 를 구현하여 사용자 지정 패널 구현에 대한 "Measure" 통과 논리를 사용자 지정합니다. 특히 코드의 이러한 측면은 다음과 같습니다.

  • 자식을 반복합니다.
  • 각 자식에 대해 패널 논리가 자식 수와 알려진 크기 제한을 처리하는 방법에 따라 적합한 크기를 사용하여 Measure를 호출합니다.
  • 크기를 반환합니다(이 경우 이 간단한 패널은 측정값을 누적할 때 계산된 크기가 아닌 고정된 크기를 반환합니다).
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{

    // Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    int i = 0;
    foreach (FrameworkElement child in Children)
    {
        if (i < 9)
        {
            child.Measure(new Size(100, 100));
        }
        else
        {
            child.Measure(new Size(0, 0));
        }

        i++;
    }


    // return the size available to the whole panel, which is 300x300
    return new Size(300, 300);
}
'First measure all children and return available size of panel 
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
    'Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    Dim i As Integer = 0
    For Each child As FrameworkElement In Children
        If i < 9 Then
            child.Measure(New Size(100, 100))
        Else
            child.Measure(New Size(0, 0))
        End If
        i += 1
    Next
    'return the size available to the whole panel, which is 300x300 
    Return New Size(300, 300)
End Function

설명

Measure 호출은 해당 특정 클래스의 MeasureOverride 구현에 도달할 수 있습니다. 그렇지 않으면 대부분의 FrameworkElement 클래스에는 Measure에 대한 암시적 기본 레이아웃 동작이 있습니다.

availableSize는 0에서 무한까지 임의의 숫자일 수 있습니다. 레이아웃에 참여하는 요소는 지정된 availableSize에 필요한 최소 크기를 반환해야 합니다.

XAML UI의 초기 레이아웃 위치 계산은 측정값 호출과 정렬 호출 순서로 구성됩니다. 측정값 호출 중에 레이아웃 시스템은 availableSize 측정값을 사용하여 요소의 크기 요구 사항을 결정합니다. 정렬 호출 중에 레이아웃 시스템은 요소 경계 상자의 크기와 위치를 마무리합니다.

레이아웃이 처음 생성되면 정렬 전에 발생하는 측정값 호출이 항상 있습니다. 그러나 첫 번째 레이아웃이 통과한 후 앞에 측정값이 없으면 Arrange 호출이 발생할 수 있습니다. 정렬에만 영향을 주는 속성이 변경되거나(예: 맞춤) 부모가 측정값 없이 정렬을 받을 때 발생할 수 있습니다.

측정값 호출은 정렬 정보를 자동으로 무효화합니다. 레이아웃 업데이트는 일반적으로 비동기적으로 발생합니다(레이아웃 시스템에 의해 결정된 시간에). 요소 크기 조정(예: Width)에 영향을 주는 속성의 변경 내용을 요소에 즉시 반영하지 않을 수 있습니다.

적용 대상

추가 정보