protected override Size ArrangeOverride(Size finalSize) { SpaceManager spaceManager = (Orientation == OrientationCategories.Vertical) ? new SpaceManager(finalSize.Width, false) : new SpaceManager(finalSize.Height, true); spaceManager.AlignLimit = AlignmentBoundary; spaceManager.AlignOnLesserEdge = AlignOnLesserEdge; foreach (UIElement child in Children) { Point point = spaceManager.InsertEdge(child.DesiredSize); child.Arrange(new Rect(point.X, point.Y, child.DesiredSize.Width, child.DesiredSize.Height)); } return(spaceManager.BoundingArea()); }
protected override Size MeasureOverride(Size availableSize) { SpaceManager spaceManager = (Orientation == OrientationCategories.Vertical) ? new SpaceManager(availableSize.Width, false) : new SpaceManager(availableSize.Height, true); spaceManager.AlignLimit = AlignmentBoundary; spaceManager.AlignOnLesserEdge = AlignOnLesserEdge; foreach (UIElement child in Children) { child.Measure(availableSize); spaceManager.InsertEdge(child.DesiredSize); } Size size = spaceManager.BoundingArea(); return(new Size(double.IsPositiveInfinity(availableSize.Width) ? size.Width : availableSize.Width, double.IsPositiveInfinity(availableSize.Height) ? size.Height : availableSize.Height)); }