此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
MSDN Library
信息
您所需的主题如下所示。但此主题未包含在此库中。

UIElement.Arrange 方法

2013/12/13

定位子对象并确定 UIElement 的大小。为其子元素实现自定义布局的父对象应从其布局重写实现调用此方法以形成递归布局更新。

Namespace:  System.Windows
程序集:  System.Windows(位于 System.Windows.dll 中)

声明
Public Sub Arrange ( _
	finalRect As Rect _
)

参数

finalRect
类型: System.Windows.Rect
布局中父对象为子对象计算的最终大小,作为 Rect 值提供。

异常条件
InvalidOperationException

finalRect 包含 Double.NaN 或无穷大值。请参见“备注”。

在执行自定义布局操作的重写方法的上下文之外无理由调用 MeasureArrange。Windows Phone 布局基于在运行时检测与对象树和布局有关的属性更改,自主工作。有关更多信息,请参见 Windows Phone 的布局

传递给 MeasurefinalRect 不能将 Double.NaN 值作为任何 Rect 值。此外,Rect 也不能将任何无穷大值作为任何 finalRect 值。

通常,调用 Arrange 将合并一个会使用每个元素的 DesiredSize 中的 heightwidth 值的 finalRect。如果元素包含布局父级无法容纳的 DesiredSize,或者如果不能容纳或排列所有子元素 DesiredSize 值的总和,则可能需要此典型行为之外的行为。在这样的情况下,可以对子元素内容进行剪裁、调整大小或将其放在滚动区域中,这些操作都取决于布局父容器中已启用的特定功能。

下面的示例演示如何在 ArrangeOverride 实现中使用 Arrange


'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