MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

UIElement.DesiredSize プロパティ

2013/12/12

レイアウト処理の測定パスの実行中にこの 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 を無視することも可能です。

通常、レイアウトの測定パスの一部としてコードで既に同じ要素に対して Measure を呼び出している場合、または UpdateLayout など、完全なレイアウト パスを開始する動作を呼び出している場合以外では、DesiredSize の値を取得することはありません。それ以外の場合には、DesiredSize に保持される値が有効である保証はありません。

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


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

表示:
© 2016 Microsoft