Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

UIElement.Arrange-Methode

Aktualisiert: November 2007

Positioniert untergeordnete Elemente und bestimmt die Größe für ein UIElement. Übergeordnete Elemente rufen diese Methode von ihrer ArrangeCore-Implementierung (oder aus einer Entsprechung auf der WPF-Frameworkebene) auf, um eine rekursive Layoutaktualisierung auszuführen. Diese Methode stellt den zweiten Durchlauf einer Layoutaktualisierung dar.

Namespace:  System.Windows
Assembly:  PresentationCore (in PresentationCore.dll)

public void Arrange(
	Rect finalRect
)
public void Arrange(
	Rect finalRect
)
public function Arrange(
	finalRect : Rect
)
Sie können diese Methoden nicht in XAML verwenden.

Parameter

finalRect
Typ: System.Windows.Rect
Die endgültige, vom übergeordneten Element für das untergeordnete Element berechnete Größe, die als Rect-Instanz bereitgestellt wird.

Für Szenarios, in denen Elemente auf der WPF-Frameworkebene abgeleitet werden, darf das Verhalten für Arrange nicht geändert werden. (Dies ist auch nicht möglich, es sei denn, es wird eine Schattenkopie erstellt.) Stattdessen empfiehlt es sich, die ArrangeOverride-Implementierung in der Klasse zu überschreiben. Die ArrangeOverride-Implementierung wird von Arrange als Teil der Standardlayoutoperationen auf der WPF-Frameworkebene intern aufgerufen. Die ArrangeCore-Implementierung muss außerdem für jedes untergeordnete Element ArrangeOverride aufrufen, sofern untergeordnete Elemente vorhanden sind.

Für Szenarios, in denen Elemente auf der WPF-Kernebene abgeleitet werden, darf das Verhalten für Arrange nicht geändert werden. (Dies ist auch nicht möglich, es sei denn, es wird eine Schattenkopie erstellt.) Stattdessen sollten Sie ArrangeCore in der Klasse überschreiben. Die ArrangeCore-Implementierung wird von Arrange als Teil der Standardlayoutoperationen auf der WPF-Frameworkebene intern aufgerufen. Voraussetzung ist jedoch, dass das Layout auf der WPF-Frameworkebene und das zugehörige Layoutsystem verwendet werden. Dies ist häufig nicht der Fall, wenn Sie Elemente auf der WPF-Kernebene von der UIElement-Basiselementklasse ableiten. Die ArrangeCore-Implementierung muss außerdem für jedes untergeordnete Element Arrange aufrufen, sofern untergeordnete Elemente vorhanden sind. Beachten Sie, dass das Szenario auf der WPF-Kernebene impliziert, dass keine abgeleitete FrameworkElement-Klasse verwendet wird, da FrameworkElement ArrangeCore versiegelt.

Die Berechnung der Layoutpositionierung auf der WPF-Frameworkebene in Windows Presentation Foundation (WPF) umfasst einen Aufruf von Measure und einen Aufruf von Arrange. Während des Aufrufs von Measure werden die Größenanforderungen eines Elements mithilfe eines bereitgestellten Size-Arguments (availableSize) bestimmt. Während des Arrange-Aufrufs wird die Elementgröße endgültig berechnet und zurückgegeben.

availableSize kann eine beliebige Zahl von 0 (null) bis unendlich annehmen. Elemente, deren Layout festgelegt werden soll, geben die mindestens benötigte Size mithilfe des availableSize-Parameters zurück.

Beim erstmaligen Instanziieren eines Layouts empfängt dieses immer einen Measure-Aufruf vor Arrange. Nach der ersten Layoutübergabe kann jedoch ein Arrange-Aufruf ohne Measure empfangen werden. Dies ist der Fall, wenn eine Eigenschaft geändert wird, die sich lediglich auf Arrange auswirkt (beispielsweise Ausrichtung), oder wenn das übergeordnete Element ein Arrange ohne Measure empfängt. Durch einen Measure-Aufruf wird ein Arrange-Aufruf automatisch für ungültig erklärt.

Layoutaktualisierungen treten generell asynchron auf (zu einem vom Layoutsystem bestimmten Zeitpunkt). Möglicherweise spiegelt ein Element nicht sofort die Änderungen an Eigenschaften wieder, die sich auf die Elementgröße auswirken (beispielsweise Width).

ms598904.alert_note(de-de,VS.90).gifHinweis:

Layoutaktualisierungen können mithilfe der UpdateLayout-Methode erzwungen werden. Das Aufrufen dieser Methode wird jedoch nicht empfohlen, da dies i. d. R. nicht erforderlich ist und die Leistung beeinträchtigt werden kann. In vielen Situationen, in denen sich möglicherweise ein Aufruf von UpdateLayout empfiehlt, verarbeitet das Layoutsystem wahrscheinlich bereits die Änderungen. Das Layoutsystem kann Layoutänderungen auf eine Weise verarbeiten, bei denen alle erforderlichen Updates in einem Paket optimiert werden.

Im Layoutsystem werden zwei separate Warteschlangen mit ungültigen Layouts verwaltet, eine für Measure und eine für Arrange. Die Layoutwarteschlange wird gemäß der Reihenfolge der Elemente in der visuellen Struktur sortiert. Elemente an höherer Position in der Struktur befinden sich oben in der Warteschlange, damit redundante Layouts aufgrund wiederholter Änderungen in übergeordneten Elementen vermieden werden. Mehrfach vorhandene Einträge werden automatisch aus der Warteschlange entfernt, und Elemente werden auch automatisch aus der Wartschlange entfernt, wenn sie bereits gültig sind.

Beim Aktualisieren eines Layouts wird die Measure-Warteschlange zuerst geleert, und anschließend wird die Arrange-Warteschlange geleert. Ein Element in der Arrange-Warteschlange wird nie angeordnet, wenn sich ein Element in der Measure-Warteschlange befindet.

In diesem Beispiel wird dargestellt, wie das Standardlayoutverhalten des Panel-Elements überschrieben werden kann und benutzerdefinierte Layoutelemente erstellt werden, die von Panel abgeleitet sind.

In diesem Beispiel wird ein einfaches benutzerdefiniertes Panel-Element (PlotPanel) definiert, das untergeordnete Elemente zwei fest programmierten x- und y-Koordinaten entsprechend positioniert. Außerdem werden in diesem Beispiel x und y auf 50 festgelegt, d. h. alle untergeordneten Elemente werden auf der x-Achse und auf der Y-Achse an dieser Position platziert.

Zur Implementierung von benutzerdefiniertem Panel-Verhalten werden in diesem Beispiel die Methoden MeasureOverride und ArrangeOverride angewendet. Jede Methode gibt die Size-Daten zurück, die zur Positionierung und zum Rendern von untergeordnete Elemente notwendig sind.

public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}


Das vollständige Beispiel finden Sie unter Beispiel für das Erstellen eines einfachen benutzerdefinierten Panel.

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0
Anzeigen: