StackPanelの要素が通常とは逆の順序(下から上、右から左など)で表示されるように、宣言的にtrueに設定できるプロパティを使用してカスタムStackPanel
を作成したいと思います。ReverseOrder
その場でリバーシブルである必要があります。
StackPanelから新しいクラスを派生させることを考えていますが、オーバーライドするメソッドを知る必要があります。
最終的解決:
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 );
}
また、定義して登録し、変更された場合はReverseOrder
呼び出します。UpdateLayout