private void ArrangeLine( int lineStart, int lineEnd, double? directDelta, double indirectOffset, double indirectGrowth )
{
double directOffset = 0.0;
Orientation o = Orientation;
bool isHorizontal = o == Orientation.Horizontal;
UIElementCollection children = Children;
for ( int index = lineStart; index < lineEnd; index++ )
{
// Get the size of the element
UIElement element = children[ index ];
OrientedSize elementSize = new OrientedSize( o, element.DesiredSize.Width, element.DesiredSize.Height );
// Determine if we should use the element's desired size or the
// fixed item width or height
double directGrowth = directDelta != null ?
directDelta.Value :
elementSize.Direct;
// Arrange the element
Rect bounds = isHorizontal ?
new Rect( directOffset, indirectOffset, directGrowth, indirectGrowth ) :
new Rect( indirectOffset, directOffset, indirectGrowth, directGrowth );
element.Arrange( bounds );
directOffset += directGrowth;
}
}
}