| File: Layouts\VerticalStackLayoutManager.cs | Web Access |
| Project: src\src\Core\src\Core.csproj (Microsoft.Maui) |
using System; using Microsoft.Maui.Graphics; namespace Microsoft.Maui.Layouts { public class VerticalStackLayoutManager : StackLayoutManager { public VerticalStackLayoutManager(IStackLayout stackLayout) : base(stackLayout) { } public override Size Measure(double widthConstraint, double heightConstraint) { var padding = Stack.Padding; double measuredHeight = 0; double measuredWidth = 0; double childWidthConstraint = widthConstraint - padding.HorizontalThickness; int spacingCount = 0; for (int n = 0; n < Stack.Count; n++) { var child = Stack[n]; if (child.Visibility == Visibility.Collapsed) { continue; } spacingCount += 1; var measure = child.Measure(childWidthConstraint, double.PositiveInfinity); measuredHeight += measure.Height; measuredWidth = Math.Max(measuredWidth, measure.Width); } measuredHeight += MeasureSpacing(Stack.Spacing, spacingCount); measuredHeight += padding.VerticalThickness; measuredWidth += padding.HorizontalThickness; var finalHeight = ResolveConstraints(heightConstraint, Stack.Height, measuredHeight, Stack.MinimumHeight, Stack.MaximumHeight); var finalWidth = ResolveConstraints(widthConstraint, Stack.Width, measuredWidth, Stack.MinimumWidth, Stack.MaximumWidth); return new Size(finalWidth, finalHeight); } public override Size ArrangeChildren(Rect bounds) { var padding = Stack.Padding; double stackHeight = padding.Top + bounds.Y; double left = padding.Left + bounds.X; double width = bounds.Width - padding.HorizontalThickness; for (int n = 0; n < Stack.Count; n++) { var child = Stack[n]; if (child.Visibility == Visibility.Collapsed) { continue; } var destination = new Rect(left, stackHeight, width, child.DesiredSize.Height); child.Arrange(destination); stackHeight += destination.Height + Stack.Spacing; } var actual = new Size(width, stackHeight); return actual.AdjustForFill(bounds, Stack); } } }