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.