private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (e.VerticalChange < 0 && e.ViewportHeightChange == 0)
{
// Stop auto scroll on manual offset change
autoScrollEnabled = false;
}
else if (!autoScrollEnabled && e.VerticalOffset == e.ExtentHeight - e.ViewportHeight)
{
// Resume auto scroll on manual offset change at the end of the extent
autoScrollEnabled = true;
}
}