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.