Criando um StackPanel reversível no WPF

Eu gostaria de construir um costumeStackPanel com umReverseOrder propriedade que posso declarar como true para que os elementos no StackPanel apareçam na ordem oposta do normal (por exemplo, de baixo para cima ou da direita para a esquerda). Ele precisa ser reversível em tempo real.

Estou pensando em derivar uma nova classe do StackPanel, mas preciso saber quais métodos substituir.

Solução final:

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

Também defina e registreReverseOrder e ligarUpdateLayout se mudar.

questionAnswers(3)

yourAnswerToTheQuestion