示例#1
0
        public Size Measure(FormsLayoutInfo info)
        {
            var desiredHeight = 0.0;
            var childrenSize = new Size(info.Size.Width, double.PositiveInfinity);
            foreach (var child in info.Children)
            {
                child.Measure(childrenSize);
                desiredHeight += child.DesiredSize.Height;
            }

            return new Size(info.Size.Width, desiredHeight);
        }
示例#2
0
 private double ArrangeChildren(FormsLayoutInfo info, int start, int to, double childXPosition, double childWidth, bool useInstantAnimation)
 {
     var currentHeight = 0.0;
     for (int i = start; i < to; i++)
     {
         var child = info.Children[i];
         var childHeight = child.DesiredSize.Height;
         var animationDuration = useInstantAnimation ? ZeroAnimationDuration : DefaultAnimationDuration;
         ArrangeChildFluently(child, new Point(childXPosition, currentHeight), new Size(childWidth, childHeight), animationDuration);
         currentHeight += childHeight;
     }
     return currentHeight;
 }
示例#3
0
        public Size Measure(FormsLayoutInfo info)
        {
            if (info.Children.Count == 0)
                return new Size(info.Size.Width, 0.0);

            var childWidth = info.Size.Width / 2.0;
            var childSize = new Size(childWidth, double.PositiveInfinity);

            var leftColumnCount = Math.Min(info.Children.Count, info.BreakOnItem);

            var firstColumnSize = MeasureChildren(info.Children, 0, leftColumnCount, childSize);
            var secondColumnSize = MeasureChildren(info.Children, info.BreakOnItem, info.Children.Count, childSize);

            var finalHeight = Math.Max(firstColumnSize, secondColumnSize);
            return new Size(info.Size.Width, finalHeight);
        }
示例#4
0
        public Size Arrange(FormsLayoutInfo info, bool useInstantAnimation)
        {
            using (BeginStoryboard())
            {
                var currentHeight = 0.0;
                foreach (var child in info.Children)
                {
                    var desiredChildHeight = child.DesiredSize.Height;

                    var animationDuration = useInstantAnimation ? ZeroAnimationDuration : DefaultAnimationDuration;
                    ArrangeChildFluently(child, new Point(0.0, currentHeight), new Size(info.Size.Width, desiredChildHeight), animationDuration);
                    currentHeight += desiredChildHeight;
                }
                return new Size(info.Size.Width, currentHeight);
            }
        }
示例#5
0
        public Size Arrange(FormsLayoutInfo info, bool useInstantAnimation)
        {
            if (info.Children.Count == 0)
                return new Size(info.Size.Width, 0.0);

            var childWidth = info.Size.Width / 2.0;

            var leftColumnCount = Math.Min(info.Children.Count, info.BreakOnItem);
            using (BeginStoryboard())
            {
                var firstColumnHeight = ArrangeChildren(info, 0, leftColumnCount, 0.0, childWidth, useInstantAnimation);
                var secondColumnHeight = ArrangeChildren(info, info.BreakOnItem, info.Children.Count, childWidth, childWidth, useInstantAnimation);

                var finalHeight = Math.Max(firstColumnHeight, secondColumnHeight);
                return new Size(info.Size.Width, finalHeight);
            }
        }
 private double ArrangeRightColumnChildren(FormsLayoutInfo info, int start, int to, double childXPosition, double childWidth, bool useInstantAnimation)
 {
     var currentHeight = 0.0;
     for (int i = start; i < to; i++)
     {
         var child = info.Children[i];
         var childHeight = child.DesiredSize.Height;
         var animationDuration = useInstantAnimation ? ZeroAnimationDuration : DefaultAnimationDuration;
         var nextAnchorPoint = GetNextAnchorPoint(currentHeight);
         if (nextAnchorPoint.HasValue && nextAnchorPoint.Value < currentHeight + childHeight)
             currentHeight = nextAnchorPoint.Value;
         ArrangeChildFluently(child, new Point(childXPosition, currentHeight), new Size(childWidth, childHeight), animationDuration);
         currentHeight += childHeight;
     }
     _firstColumnAnchorPoints.Clear();
     return currentHeight;
 }