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

UIElement.DesiredSize 속성

2013-12-13

레이아웃 프로세스의 측정 처리 단계에서 이 UIElement가 계산한 크기를 가져옵니다.

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

‘선언
Public ReadOnly Property DesiredSize As Size

속성 값

형식: System.Windows.Size
레이아웃 프로세스의 측정 처리 단계에서 이 UIElement가 계산한 크기입니다.

DesiredSize 값은 Measure 호출의 일부로 레이아웃 시스템에서 설정됩니다.

DesiredSize 값은 특히 정렬 처리 단계에서 레이아웃 재정의 동작을 구현하는 경우에 유용합니다. 시나리오에 따라 레이아웃 논리에서 DesiredSize를 그대로 적용하는 경우도 있고, DesiredSize에 대해 제약 조건이 적용될 수도 있습니다. 이러한 제약 조건으로 인해 레이아웃의 부모 또는 자식의 다른 특성이 변경될 수도 있습니다. 예를 들어 스크롤 가능한 영역을 지원하는 컨트롤(이미 스크롤 가능한 영역을 활성화한 상태인 컨트롤에서는 파생할 수 없음)은 사용 가능한 크기를 DesiredSize와 비교할 수 있습니다. 그런 다음 이 컨트롤은 해당 컨트롤에 대해 UI에 스크롤 막대를 사용하도록 설정한 내부 상태를 설정할 수 있습니다. 특정 레이아웃 시나리오에서는 DesiredSize를 무시할 수도 있습니다.

일반적으로 레이아웃 측정 처리 단계의 일부로 코드를 통해 동일한 요소에서 Measure가 호출되었거나 UpdateLayout과 같이 전체 레이아웃 처리 단계를 시작하는 메서드가 호출된 컨텍스트 외에는 DesiredSize 값을 가져오지 않습니다. 이러한 경우가 아니면 DesiredSize에 포함된 값이 적절하다고 확신할 수 없습니다.

다음 예제에서는 DesiredSizeArrangeOverride 구현에 대해 자식 반복의 일부로 쿼리합니다.


'Second arrange all children and return final size of panel 
Protected Overloads Overrides Function ArrangeOverride(ByVal finalSize As Size) As Size
    'Get the collection of children 
    Dim mychildren As UIElementCollection = Children

    'Get total number of children 
    Dim count As Integer = mychildren.Count

    'Arrange children 
    'We're only allowing 9 children in this panel. More children will get a 0x0 layout slot. 
    Dim i As Integer
    For i = 0 To 8

        'Get (left, top) origin point for the element in the 3x3 block 
        Dim cellOrigin As Point = 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. 
        Dim dw As Double = mychildren(i).DesiredSize.Width
        Dim dh As Double = mychildren(i).DesiredSize.Height


        mychildren(i).Arrange(New Rect(cellOrigin.X, cellOrigin.Y, dw, dh))
    Next
    For i = 9 To count - 1

        'Give the remaining children a 0x0 layout slot 
        mychildren(i).Arrange(New Rect(0, 0, 0, 0))
    Next


    'Return final size of the panel 
    Return New Size(300, 300)
End Function

'Calculate point origin of the Block you are in 
Protected Function GetOrigin(ByVal blockNum As Integer, ByVal blocksPerRow As Integer, ByVal itemSize As Size) As Point
    'Get row number (zero-based) 
    Dim row As Integer = CInt(Math.Floor(blockNum / blocksPerRow))

    'Get column number (zero-based) 
    Dim column As Integer = blockNum - blocksPerRow * row

    'Calculate origin 
    Dim origin As New Point(itemSize.Width * column, itemSize.Height * row)
    Return origin

End Function


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시:
© 2015 Microsoft