Erstellen eines reversiblen StackPanels in WPF

Ich möchte eine benutzerdefinierte erstellenStackPanel mit einerReverseOrder -Eigenschaft, die ich deklarativ auf true setzen kann, damit die Elemente im StackPanel in der entgegengesetzten Reihenfolge der Normalen angezeigt werden (z. B. von unten nach oben oder von rechts nach links). Es muss im laufenden Betrieb reversibel sein.

Ich denke darüber nach, eine neue Klasse von StackPanel abzuleiten, aber ich muss wissen, welche Methoden zu überschreiben sind.

Endgültige Lösung

protected override System.Windows.Size ArrangeOverride( System.Windows.Size arrangeSize ) {
    double x = 0;
    double y = 0;

    IEnumerable<UIElement> children = ReverseOrder ? InternalChildren.Cast<UIElement>().Reverse<UIElement>() : InternalChildren.Cast<UIElement>();
    foreach ( UIElement child in children ) {
        var size = child.DesiredSize;
        child.Arrange( new Rect( new Point( x, y ), size ) );

        if ( Orientation == Orientation.Horizontal )
            x += size.Width;
        else
            y += size.Height;
    }

    if ( Orientation == Orientation.Horizontal )
        return new Size( x, arrangeSize.Height );
    else
        return new Size( arrangeSize.Width, y );
}

Definieren und registrieren Sie auchReverseOrder und Ruf anUpdateLayout wenn es sich ändert.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage