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));
        }