Ejemplo n.º 1
0
        protected override SizeF MeasureOverride(SizeF constraint)
        {
            if (!this.CollapsingEnabled || this.IsDesignMode || constraint == SizeF.Empty)
            {
                return(base.MeasureOverride(constraint));
            }
            ExpandableStackLayout.InvalidateAll((RadElement)this);
            SizeF allElementsSize = this.GetAllElementsSize(constraint);
            int   count           = this.Children.Count;

            if ((double)allElementsSize.Width >= (double)constraint.Width)
            {
                do
                {
                    int possibleCollapseStep;
                    CollapsibleElement elementToCollapse;
                    do
                    {
                        possibleCollapseStep = -1;
                        elementToCollapse    = this.GetElementToCollapse(out possibleCollapseStep);
                        if (elementToCollapse != null)
                        {
                            elementToCollapse.InvalidateMeasure();
                            elementToCollapse.Measure(constraint);
                            SizeF desiredSize = elementToCollapse.DesiredSize;
                            elementToCollapse.SizeBeforeCollapsing = desiredSize;
                        }
                        else
                        {
                            goto label_11;
                        }
                    }while (!elementToCollapse.CollapseElementToStep(possibleCollapseStep));
                    ExpandableStackLayout.InvalidateAll((RadElement)elementToCollapse);
                    elementToCollapse.Measure(constraint);
                    SizeF desiredSize1 = elementToCollapse.DesiredSize;
                    elementToCollapse.SizeAfterCollapsing = desiredSize1;
                    ++this.collapsedElementCount;
                }while ((double)this.GetAllElementsSize(constraint).Width > (double)constraint.Width);
            }
            else
            {
                for (int index = 0; index < count; ++index)
                {
                    int possibleExpandStep             = -1;
                    CollapsibleElement elementToExpand = this.GetElementToExpand(allElementsSize.Width, constraint.Width, out possibleExpandStep);
                    if (elementToExpand != null && ((double)allElementsSize.Width - (double)elementToExpand.DesiredSize.Width + (double)elementToExpand.SizeBeforeCollapsing.Width <= (double)constraint.Width && elementToExpand.ExpandElementToStep(possibleExpandStep)))
                    {
                        --this.collapsedElementCount;
                    }
                }
            }
label_11:
            ExpandableStackLayout.InvalidateAll((RadElement)this);
            return(this.GetAllElementsSize(constraint));
        }
Ejemplo n.º 2
0
        protected override SizeF MeasureOverride(SizeF constraint)
        {
            if (!this.CollapsingEnabled || this.IsDesignMode)
            {
                return(base.MeasureOverride(constraint));
            }

            InvalidateAll(this);
            SizeF allElementsSize = this.GetAllElementsSize(constraint);

            int count = this.Children.Count;

            if (allElementsSize.Width >= constraint.Width)
            {
                while (true)
                {
                    int possibleCollapseStep = -1;
                    CollapsibleElement collapsibleElement = this.GetElementToCollapse(out possibleCollapseStep);
                    if (collapsibleElement == null)
                    {
                        break;
                    }

                    collapsibleElement.InvalidateMeasure();
                    collapsibleElement.Measure(constraint);

                    SizeF sizeBeforeCollapsing = collapsibleElement.DesiredSize;
                    collapsibleElement.SizeBeforeCollapsing = sizeBeforeCollapsing;
                    if (collapsibleElement.CollapseElementToStep(possibleCollapseStep))
                    {
                        InvalidateAll(collapsibleElement);
                        collapsibleElement.Measure(constraint);

                        SizeF sizeAfterCollapsing = collapsibleElement.DesiredSize;

                        collapsibleElement.SizeAfterCollapsing = sizeAfterCollapsing;

                        this.collapsedElementCount++;
                        allElementsSize = this.GetAllElementsSize(constraint);
                        if (allElementsSize.Width <= constraint.Width)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < count; ++i)
                {
                    int possibleExpandStep = -1;
                    CollapsibleElement expandableElement = this.GetElementToExpand(allElementsSize.Width, constraint.Width, out possibleExpandStep);
                    if (expandableElement != null)
                    {
                        if (allElementsSize.Width - expandableElement.DesiredSize.Width + expandableElement.SizeBeforeCollapsing.Width <= constraint.Width)
                        {
                            if (expandableElement.ExpandElementToStep(possibleExpandStep))
                            {
                                this.collapsedElementCount--;
                            }
                        }
                    }
                }
            }

            InvalidateAll(this);
            //allElementsSize = this.GetAllElementsSize(constraint);
            return(allElementsSize);
        }