MSDN Library
信息
您所需的主题如下所示。但此主题未包含在此库中。

UIElement.Arrange 方法

2013/12/13

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

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

public void Arrange(
	Rect finalRect
)

参数

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 override Size ArrangeOverride(Size finalSize)
{
    // Get the collection of children
    UIElementCollection mychildren = Children;

    // Get total number of children
    int count = mychildren.Count;

    // Arrange children
    // We're only allowing 9 children in this panel.  More children will get a 0x0 layout slot.
    int i;
    for (i = 0; i < 9; i++)
    {

        // Get (left, top) origin point for the element in the 3x3 block
        Point cellOrigin = 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.
        double dw = mychildren[i].DesiredSize.Width;
        double dh = mychildren[i].DesiredSize.Height;

        mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));

    }

    // Give the remaining children a 0x0 layout slot
    for (i = 9; i < count; i++)
    {
        mychildren[i].Arrange(new Rect(0, 0, 0, 0));
    }


    // Return final size of the panel
    return new Size(300, 300);
}

// Calculate point origin of the Block you are in
protected Point GetOrigin(int blockNum, int blocksPerRow, Size itemSize)
{
    // Get row number (zero-based)
    int row = (int)Math.Floor(blockNum / blocksPerRow);

    // Get column number (zero-based)
    int column = blockNum - blocksPerRow * row;

    // Calculate origin
    Point origin = new Point(itemSize.Width * column, itemSize.Height * row);
    return origin;

}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2016 Microsoft