Ejemplo n.º 1
0
        public static Size Measure(IWrapPanel panel, Size availableSize)
        {
            var orientation        = panel.Orientation;
            var result             = new OrientedSize(orientation);
            var lineSize           = new OrientedSize(orientation);
            var orientedConstraint = new OrientedSize(orientation, availableSize);

            var itemWidth  = panel.ItemWidth.IsNaN() ? (double?)null : panel.ItemWidth;
            var itemHeight = panel.ItemHeight.IsNaN() ? (double?)null : panel.ItemHeight;

            var itemConstraintSize = new Size(itemWidth ?? availableSize.Width, itemHeight ?? availableSize.Height);

            foreach (var element in panel.Elements)
            {
                element.Measure(itemConstraintSize);
                var elementSize = element.GetDesiredOrientedSize(orientation, itemWidth, itemHeight);

                if (orientedConstraint.Direct.IsLessThan(lineSize.Direct + elementSize.Direct, XamlConstants.LayoutComparisonPrecision))
                {
                    result   = result.WrapSize(lineSize);
                    lineSize = elementSize;

                    if (!orientedConstraint.Direct.IsLessThan(elementSize.Direct, XamlConstants.LayoutComparisonPrecision))
                    {
                        continue;
                    }

                    result   = result.WrapSize(elementSize);
                    lineSize = new OrientedSize(orientation);
                }
                else
                {
                    lineSize = lineSize.StackSize(elementSize);
                }
            }

            return(result.WrapSize(lineSize).Size);
        }
Ejemplo n.º 2
0
 public static OrientedSize WrapSize(this OrientedSize self, Size itemSize)
 {
     return(self.WrapSize(itemSize.AsOriented(self.Orientation)));
 }