UIElement.Arrange(Rect) メソッド

定義

子オブジェクトを配置し、 UIElement のサイズを決定します。 子要素のカスタム レイアウトを実装する親オブジェクトは、そのレイアウトオーバーライド実装からこのメソッドを呼び出して、再帰的なレイアウト更新を形成する必要があります。

public:
 virtual void Arrange(Rect finalRect) = Arrange;
void Arrange(Rect const& finalRect);
public void Arrange(Rect finalRect);
function arrange(finalRect)
Public Sub Arrange (finalRect As Rect)

パラメーター

finalRect
Rect

親がレイアウト内の子に対して計算する最終的なサイズ。 Rect 値として指定されます。

この例では、ArrangeOverride 実装内での使用方法Arrangeを示します。 基本的な考え方は、 として渡す前に目的のサイズを変更または無視する特定のデザインがレイアウト実装に含まれていない限り、 の値finalRectを持つよう、呼び出Arrangeそうとするすべてのものに対して DesiredSize に対してクエリを実行する必要があるということですfinalRect

// 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);
}

注釈

呼び出しは Arrange 、その特定のクラスの ArrangeOverride 実装に到達する可能性があります。 それ以外の場合、ほとんどの FrameworkElement クラスには、 の暗黙的な既定のレイアウト動作があります Arrange

XAML UI での初期レイアウト配置の計算は、 メジャー 呼び出しと呼び出し Arrange で構成されます。 Measure呼び出し中に、レイアウト システムは、測定を使用して要素のサイズ要件をavailableSize決定します。 Arrange 呼び出し中に、レイアウト システムは要素の境界ボックスのサイズと位置を最終処理します。

レイアウトが最初に生成されるときは、常に に行われる ArrangeMeasure 呼び出しがあります。 ただし、最初のレイアウト パスの後に、 を前に置かずに Arrange 呼び出しを Measure 行うことができます。 これは、 にのみArrange影響するプロパティが変更された場合 (配置など)、または親が を持たない MeasureArrange受け取ったときに発生する可能性があります。

Measure 呼び出しは、すべてのArrange情報を自動的に無効にします。 通常、レイアウトの更新は非同期的に行われます (レイアウト システムによって決定される時点)。 要素のサイズ設定 ( Width など) に影響を与えるプロパティの変更が要素にすぐに反映されない場合があります。

UpdateLayout メソッドを使用して、組み込みのレイアウト システムの動作に依存するのではなく、アプリ コードによってレイアウトの更新を強制できます。 ただし、これは推奨されません。 通常は不要であり、過度に使用するとパフォーマンスが低下する可能性があります。 プロパティの変更により、アプリ コードからの呼び出し UpdateLayout が適切な場合は、多くの場合、レイアウト システムが既に更新を処理している可能性があります。 レイアウト システムには、親子関係を介したレイアウト変更の連鎖を処理するための最適化も用意されており、呼び出し UpdateLayout はこのような最適化に対して機能します。 それでも、レイアウトの問題やレイアウトに関するその他の問題を解決するために、呼び出し UpdateLayout が最適なオプションである、より複雑なシナリオにレイアウトの状況が存在する可能性があります。 意図的かつ控えめに使用するだけです。

適用対象

こちらもご覧ください