다음을 통해 공유


FrameworkElement.MeasureOverride(Size) 메서드

정의

레이아웃 주기의 "측정값" 패스에 대한 동작을 제공합니다. 클래스는 이 메서드를 재정의하여 고유한 "측정값" 전달 동작을 정의할 수 있습니다.

protected:
 virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) 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

설명

이 메서드에는 대부분의 FrameworkElement 파생 클래스에 대한 기본 제공 레이아웃을 수행하는 기본 구현이 있습니다. MeasureOverride는 다른 클래스에 대한 자체의 MeasureOverride 메서드를 포함하여 내부 레이아웃 논리 또는 사용자 고유의 앱 코드에 의해 Measure가 호출될 때마다 Measure에 대한 동작을 제공합니다. 템플릿 지정 컨트롤을 생성하는 경우 MeasureOverride 논리는 컨트롤의 특정 "측정값" 전달 레이아웃 논리를 정의합니다.

앱이 실행되면 요소가 레이아웃 프로세스를 통과하는 방법에 대한 일반적인 디자인은 "측정값" 패스와 "정렬" 패스의 두 단계로 나뉩니다. 레이아웃 처리의 "측정값" 패스를 사용자 지정하려는 컨트롤 작성자(또는 패널 작성자)는 MeasureOverride를 재정의해야 합니다. 구현은 다음을 수행해야 합니다.

  • 레이아웃의 일부인 클래스의 특정 자식 개체 컬렉션을 반복하고 각 자식 개체에 대해 Measure 를 호출합니다.
  • 각 자식에 대해 DesiredSize 를 즉시 가져옵니다( Measure 가 호출된 후 속성으로 설정됨).
  • 자식 개체에 필요한 크기의 실행 중인 측정값에 따라 부모의 원하는 순 크기를 계산합니다. MeasureOverride의 반환 값은 개체의 원하는 크기여야 합니다. 그러면 현재 개체의 부모에 대한 Measure 입력이 됩니다. 이 동일한 프로세스는 페이지/개체 트리의 루트에 도달할 때까지 레이아웃 시스템을 통해 계속됩니다. 이 프로세스 중에 자식 개체는 초기 availableSize보다 더 큰 DesiredSize 크기를 반환하여 자식 개체가 더 많은 공간을 원한다는 것을 나타낼 수 있습니다. 이는 스크롤 가능한 영역을 도입하고, 부모 컨트롤의 크기를 조정하고, 누적 순서를 설정하거나, 레이아웃 컨테이너의 의도된 기능에 따라 달라질 수 있는 콘텐츠를 측정하거나 정렬하기 위한 솔루션 수를 설정하여 사용자 고유의 구현에서 처리될 수 있습니다.

적용 대상

추가 정보