要查看英语原文,请勾选“英语”复选框。也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

UIElement.Arrange 方法

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

命名空间:  System.Windows
程序集:  System.Windows(在 System.Windows.dll 中)

public void Arrange(
	Rect finalRect
)

参数

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

异常条件
InvalidOperationException

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

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

传递给 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;

}


Silverlight

受以下版本支持:5、4、3

Silverlight for Windows Phone

受以下版本支持:Windows Phone OS 7.1、Windows Phone OS 7.0

有关 Silverlight 支持的操作系统和浏览器的列表,请参见 支持的操作系统和浏览器

社区附加资源

添加
显示: