UIElement.DesiredSize プロパティ

2013/12/12

レイアウト処理の測定パスの実行中にこの 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 に保持される値が有効である保証はありません。

次の例は、ArrangeOverride の実装で、子の反復処理の過程で DesiredSize を照会します。


'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

表示:
© 2014 Microsoft