UIElement.DesiredSize 属性

2013/12/13

获取此 UIElement 在布局过程的测量处理过程中计算的大小。

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

public Size DesiredSize { get; }

属性值

类型: System.Windows.Size
UIElement 在布局过程的测量处理过程中计算的大小。

DesiredSize 值由布局系统作为对 Measure 的调用的一部分设置。

如果正在实现布局重写行为(尤其是在排列处理过程期间),则 DesiredSize 值很有用。根据具体情况,您的布局逻辑可能会充分考虑 DesiredSize,可能应用 DesiredSize 上的约束,并且此类约束可能也会更改布局中父对象或子对象的其他特征。例如,支持可滚动区域(但选择不从已启用可滚动区域的控件派生)的控件可以将可用大小与 DesiredSize 进行比较。该控件于是可以在其 UI 中设置启用滚动条的内部状态。或者,在某些布局情况下也可能忽略 DesiredSize

您通常不能在以下这样的上下文之外获取 DesiredSize 的值:其中您的代码已对该同一元素调用 Measure 作为布局度量处理过程的一部分,或已调用启动完整布局处理过程的某些内容,如 UpdateLayout。否则,无法保证 DesiredSize 包含的值是相关的。

下面的示例查询 DesiredSize 以作为 ArrangeOverride 实现的子迭代的一部分。


// 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

显示:
© 2014 Microsoft