protected override Size ArrangeOverride(Size arrangeSize)
{ UIElementCollection internalChildren = base.InternalChildren; int count = internalChildren.Count; int num2 = count - (this.LastChildFill ? 1 : 0); double x = 0.0; double y = 0.0; double num5 = 0.0; double num6 = 0.0; for (int i = 0; i < count; i++) { UIElement element = internalChildren[i]; if (element != null) { Size desiredSize = element.DesiredSize; Rect finalRect = new Rect(x, y, Math.Max((double) 0.0, (double) (arrangeSize.Width - (x + num5))), Math.Max((double) 0.0, (double) (arrangeSize.Height - (y + num6)))); if (i < num2) { switch (GetDock(element)) { case Dock.Left: x += desiredSize.Width; finalRect.Width = desiredSize.Width; break; case Dock.Top:
y += desiredSize.Height; finalRect.Height = desiredSize.Height; break; case Dock.Right:
num5 += desiredSize.Width; finalRect.X = Math.Max((double) 0.0, (double) (arrangeSize.Width - num5)); finalRect.Width = desiredSize.Width; break; case Dock.Bottom:
num6 += desiredSize.Height; finalRect.Y = Math.Max((double) 0.0, (double) (arrangeSize.Height - num6)); finalRect.Height = desiredSize.Height; break; } } element.Arrange(finalRect); } } return arrangeSize; } protected override Size MeasureOverride(Size constraint)
{ UIElementCollection internalChildren = base.InternalChildren; double num = 0.0; double num2 = 0.0; double num3 = 0.0; double num4 = 0.0; int num5 = 0; int count = internalChildren.Count; while (num5 < count) { UIElement element = internalChildren[num5]; if (element != null) { Size availableSize = new Size(Math.Max((double) 0.0, (double) (constraint.Width - num3)), Math.Max((double) 0.0, (double) (constraint.Height - num4))); element.Measure(availableSize); Size desiredSize = element.DesiredSize; switch (GetDock(element)) { case Dock.Left: case Dock.Right: num2 = Math.Max(num2, num4 + desiredSize.Height); num3 += desiredSize.Width; break; case Dock.Top:
case Dock.Bottom: num = Math.Max(num, num3 + desiredSize.Width); num4 += desiredSize.Height; break; } } num5++; } num = Math.Max(num, num3); return new Size(num, Math.Max(num2, num4)); } |
|