protected override sealed Size MeasureOverride (Size availableSize)
{
Size childAvailable = new Size (double.PositiveInfinity, double.PositiveInfinity);
Size measured = new Size (0, 0);
if (Orientation == Orientation.Vertical) {
// Vertical layout
childAvailable.Width = availableSize.Width;
if (!Double.IsNaN (this.Width))
childAvailable.Width = this.Width;
childAvailable.Width = Math.Min (childAvailable.Width, this.MaxWidth);
childAvailable.Width = Math.Max (childAvailable.Width, this.MinWidth);
} else {
// Horizontal layout
childAvailable.Height = availableSize.Height;
if (!Double.IsNaN (this.Height))
childAvailable.Height = this.Height;
childAvailable.Height = Math.Min (childAvailable.Height, this.MaxHeight);
childAvailable.Height = Math.Max (childAvailable.Height, this.MinHeight);
}
// Measure our children to get our extents
foreach (UIElement child in Children) {
child.Measure (childAvailable);
Size size = child.DesiredSize;
if (Orientation == Orientation.Vertical) {
measured.Height += size.Height;
measured.Width = Math.Max (measured.Width, size.Width);
} else {
measured.Width += size.Width;
measured.Height = Math.Max (measured.Height, size.Height);
}
}
return measured;
}