Windows Dev Center

Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Informationen
Das angeforderte Thema wird unten angezeigt. Es ist jedoch nicht in dieser Bibliothek vorhanden.

UIElement.Arrange-Methode

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
)

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 FrameworkElementArrangeCore versiegelt.

Die Berechnung der WPF framework-level-Layoutpositionierung in Windows Presentation Foundation (WPF) besteht aus einem einen Aufruf von Measure und einen Aufruf von Arrange. Während des Aufrufs von Measure bestimmt das Layoutsystem die Größenanforderungen eines Elements mithilfe eines bereitgestellten Size-Arguments (availableSize) bestimmt. Während des Arrange-Aufrufs schließt das Layoutsystem die Größe und die Position des umgebenden Felds eines Elements ab. Weitere Informationen finden Sie unter Layoutsystem.

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).

HinweisHinweis

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.

This example shows how to override the default layout behavior of the Panel element and create custom layout elements that are derived from Panel.

The example defines a simple custom Panel element called PlotPanel, which positions child elements according to two hard-coded x- and y-coordinates. In this example, x and y are both set to 50; therefore, all child elements are positioned at that location on the x and y axes.

To implement custom Panel behaviors, the example uses the MeasureOverride and ArrangeOverride methods. Each method returns the Size data that is necessary to position and render child elements.


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


.NET Framework

Unterstützt in: 4, 3.5, 3.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

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

Datum

Versionsgeschichte

Grund

Der Absatz zur Berechnung der Layoutpositionierung wurde unter "Hinweise" genauer erläutert.

Kundenfeedback.

Community-Beiträge

Anzeigen:
© 2015 Microsoft