Создание обратимой StackPanel в WPF

Я хотел бы создать кастомStackPanel сReverseOrder свойство, которое я могу декларативно установить в значение true, чтобы элементы в StackPanel отображались в порядке, обратном нормали (например, снизу вверх или справа налево). Это должно быть обратимо на лету.

Я думаю о выводе нового класса из 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 если это изменится.

Ответы на вопрос(3)

Ваш ответ на вопрос