Erweitern Minimieren

UIElement.Arrange Method

Positioniert untergeordnete Objekte und bestimmt die Größe für ein UIElement. Übergeordnete Objekte, die benutzerdefiniertes Layout für ihre untergeordneten Elemente implementieren, rufen diese Methode aus ihren Layoutüberschreibungsimplementierungen auf, um ein rekursives Layoutupdate auszuführen.

Syntax


public void Arrange(
  Rect finalRect
)

Parameter

finalRect

Typ: Rect

Die endgültige, vom übergeordneten Element für das untergeordnete Element im Layout berechnete Größe, die als Rect-Wert bereitgestellt wird.

Hinweise

Der Arrange Aufruf erreicht möglicherweise eine ArrangeOverride Implementierung dieser bestimmten Klasse. Andernfalls weisen die meisten FrameworkElement-Klassen ein implizites Standardlayoutverhalten für Arrange auf.

Die Berechnung der ursprünglichen Layoutpositionierung in einer XAML Benutzeroberfläche besteht aus einem Measure-Aufruf und einem Arrange-Aufruf, in dieser Reihenfolge. Während des Aufrufs von Measure bestimmt das Layoutsystem die Größenanforderungen eines Elements mithilfe der availableSize-Messung. Während des Arrange-Aufrufs schließt das Layoutsystem die Größe und die Position des umgebenden Felds eines Elements ab.

Wenn ein Layout erstmalig erzeugt wird, verfügt es immer über einen Measure-Aufruf, der vor Arrange stattfindet. Nach dem ersten Layoutdurchlauf kann jedoch ein Arrange-Aufruf auftreten, ohne dass ihm eine Measure vorausgeht. Dies kann auftreten, wenn eine Eigenschaft, die nur Arrange betrifft, geändert wird (z. B. Ausrichtung) oder wenn das übergeordnete Element Arrange ohne Measure empfängt.

Bei einem Measure-Aufruf werden alle Arrange-Informationen automatisch ungültig. Layoutaktualisierungen treten generell asynchron auf (zu einem vom Layoutsystem bestimmten Zeitpunkt). Möglicherweise spiegelt ein Element die Änderungen an Eigenschaften nicht sofort wider, die sich auf die Elementgröße auswirken (beispielsweise Width).

Layoutaktualisierungen können durch App-Code erzwungen werden, was sicherer ist als das Vertrauen auf das Verhalten des internen Layoutsystems nach Anwendung der UpdateLayout-Methode. Dies wird jedoch nicht empfohlen. Es ist normalerweise nicht erforderlich und kann bei häufiger Verwendung die Leistung beeinträchtigen. In vielen Situationen, in denen der Aufruf von UpdateLayout aus dem Code der App möglicherweise angebracht ist, verarbeitet das Layoutsystem wahrscheinlich bereits asynchron die Änderungen. Das Layoutsystem verfügt auch über Optimierungen zur Handhabung von Kaskaden von Layoutänderungen durch Beziehungen zwischen übergeordneten und untergeordneten Elementen. Das Aufrufen von UpdateLayout kann gegen solche Optimierungen arbeiten. Trotzdem ist es möglich, das in komplizierteren Szenarien Layoutsituationen vorkommen, in den der Aufruf von UpdateLayout die beste Option zur Lösung von Zeitproblemen oder andere Layout-Probleme ist. Verwenden Sie dies gezielt und sparsam.

Beispiele

Dieses Beispiel zeigt, wie Sie Arrange innerhalb einer ArrangeOverride- Implementierung verwenden. Die Grundidee ist, dass Sie DesiredSize nach allem abfragen, für das Sie Arrange aufzurufen versuchen, damit Sie einen Wert für finalRect erhalten. Es sei denn, die Layoutimplementierung verfügt über einige bestimmte Entwürfe, die die gewünschte Größe ändert oder ignoriert, bevor sie sie als finalRect übergibt.


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


Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

UIElement
ArrangeOverride
MeasureOverride

 

 

Anzeigen:
© 2015 Microsoft