Создание обратимой 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
если это изменится.