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