in tools/Explorer/TabControl/TabPanel.cs [428:489]
protected override Size ArrangeOverride(Size finalSize)
{
// monitors changes to the ScrollViewer extent value
if (_oldExtent != _extent)
{
_oldExtent = _extent;
if (_scrollOwner != null)
_scrollOwner.InvalidateScrollInfo();
}
// monitors changes to the parent container size, (ie window resizes)
if (finalSize != _lastSize)
{
_lastSize = finalSize;
if (_scrollOwner != null)
_scrollOwner.InvalidateScrollInfo();
}
// monitor scrolling being removed
bool invalidateMeasure = false;
if (_extent.Width <= _viewPort.Width && _offset.X > 0)
{
_offset.X = 0;
_translateTransform.X = 0;
if (_scrollOwner != null)
_scrollOwner.InvalidateScrollInfo();
invalidateMeasure = true;
}
if (_extent.Height <= _viewPort.Height && _offset.Y > 0)
{
_offset.Y = 0;
_translateTransform.Y = 0;
if (_scrollOwner != null)
_scrollOwner.InvalidateScrollInfo();
invalidateMeasure = true;
}
if (invalidateMeasure)
InvalidateMeasure();
// arrange the children
for (var i = 0; i < InternalChildren.Count; i++)
{
InternalChildren[i].Arrange(_childRects[i]);
}
// we need these lines as when the Scroll Buttons get Shown/Hidden,
// the _offset value gets out of line, this will ensure that our scroll position stays in line
if (InternalChildren.Count > 0)
{
_offset = _childRects[FirstVisibleIndex].TopLeft;
_translateTransform.X = -_offset.X;
_translateTransform.Y = -_offset.Y;
}
return finalSize;
}