FrameworkElement.ArrangeOverride Method

Stellt das Verhalten für den "Arrange"-Schritt des Layoutzyklus bereit. Klassen können diese Methode außer Kraft setzen, um das eigene Verhalten beim "Anordnen"-Durchgang zu definieren.

Syntax


protected virtual Size ArrangeOverride(
  Size finalSize
)

Parameter

finalSize

Typ: Size

Der letzte Bereich im übergeordneten Objekt, in dem dieses Objekt sich selbst und seine untergeordneten Elemente anordnen soll.

Rückgabewert

Typ: Size

Die tatsächliche verwendete Größe, nachdem das Element im Layout angeordnet wurde.

Hinweise

Diese Methode verfügt über eine Standardimplementierung, die integriertes Layout für die meisten abgeleiteten FrameworkElement-Klassen ausführt. ArrangeOverride stellt das Verhalten für Arrange bereit, sobald Arrange entweder durch interne Layoutlogik oder den Code Ihrer eigenen App einschließlich aller Ihrer ArrangeOverride-Methoden für andere Klassen aufgerufen wird. Wenn Sie ein vorlagenbasiertes Steuerelement erstellen, definiert die ArrangeOverride -Logik die spezifische Layoutlogik für den "Arrange"-Schritt.

Der allgemeine Entwurf dazu, wie Elemente einen Layoutprozess durchlaufen, wenn die App ausgeführt wird, ist in zwei Schritte unterteilt: eine "Measure"-Übergabe und dann eine "Arrange"-Übergabe. Steuerelementautoren (oder Bereichsentwickler), die die "Arrange"-Übergabe der Layoutverarbeitung anpassen möchten, müssen ArrangeOverride überschreiben. Im Implementierungsmuster muss Arrange für jedes sichtbare untergeordnete Objekt aufgerufen und die endgültige gewünschte Größe der einzelnen untergeordneten Objekte als finalRect-Parameter übergeben werden. Wenn Arrange nicht aufgerufen wird, wird das untergeordnete Objekt nicht gerendert.

Mehrere vorhandene nicht versiegelte Klassen stellen Überschreibungsimplementierungen dieser Methode bereit. Dazu zählen beispielsweise StackPanel und Grid. In der Regel erzeugt das Verhalten von ArrangeOverride eine finalSize, die keine benutzerdefinierten für den Layoutcontainer festgelegten Werte verletzt. Beispielsweise ist finalSize meist nicht größer als das Height und Width des Containers (unter Berücksichtigung der Werte für Margin und Padding, die den Inhaltsbereich beeinflussen). Steuerelemente, die ausdrücklich über ein Szenario zum Überschreiten der Containergröße verfügen, können einen größeren Wert zurückgeben. Allerdings muss jeder, der das Steuerelement verwendet, Probleme bei Clipping und Positionierung selbst behandeln. Der Wert, den eine ArrangeOverride-Implementierung für jedes untergeordnete Objekt an Arrange übergibt, ist im Allgemeinen der Wert, der in DesiredSize durch den vorherigen Measure-Aufruf festgelegt wurde.

Beispiele

Dieses Beispiel implementiert ArrangeOverride, um die "Arrange"-Übergabelogik für die Implementierung eines benutzerdefinierten Bereichs anzupassen. Beachten Sie insbesondere die folgenden Aspekte des Codes:

  • Durchläuft untergeordnete Elemente.

  • Ruft für jedes untergeordnete Element Arrange auf, indem Rect verwendet wird, bei dem Height und Width auf DesiredSize basieren und X sowie Y auf Logik basieren, die für den Bereich spezifisch ist.

  • Gibt die Größe des Elements zurück (in diesem Fall gibt dieser einfache Bereich eine feste Größe statt einer Größe zurück, die anhand der Akkumulierung der angeordneten Rect-Wertmaße berechnet wurde).


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

FrameworkElement
Arrange
MeasureOverride
Schnellstart: Definieren von Layouts

 

 

Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.