public double PreMeasure(double availableSize)
{
// Reset allocated field each measure cycle
StarAllocated = false;
// Update cached unit type
UserGridUnitType = DefUserSize.GridUnitType;
// If the available size is infinite then any Star type becomes Auto instead
if (availableSize == double.PositiveInfinity)
if (UserGridUnitType == GridUnitType.Star)
UserGridUnitType = GridUnitType.Auto;
double retStars = 0.0;
switch(UserGridUnitType)
{
case GridUnitType.Pixel:
MinSize = Math.Max(DefUserMin, Math.Min(DefUserSize.Value, DefUserMax));
MeasureSize = MinSize;
break;
case GridUnitType.Auto:
MinSize = DefUserMin;
MeasureSize = double.PositiveInfinity;
break;
case GridUnitType.Star:
retStars = DefUserSize.Value;
MinSize = DefUserMin;
MeasureSize = availableSize;
break;
}
DesiredSize = MinSize;
return retStars;
}