我想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