private void UpdateCanvas(FixedPagePresenter presenter, SinglePageInfo pageInfo, Point scrollOffset, Rect viewport) { Canvas.SetLeft(presenter, pageInfo.PositionInView.X - scrollOffset.X); double offset = pageInfo.PositionInView.Y - scrollOffset.Y; if (offset > pageInfo.VerticalOffset || (offset > 0 && offset < pageInfo.VerticalOffset)) { Canvas.SetTop(presenter, pageInfo.VerticalOffset); return; } else if (offset < 0) { double totalheight = pageInfo.BottomPositionInView - pageInfo.TopPositionInView; double heightOutside = -offset; double heightInside = totalheight - heightOutside; if (heightInside < viewport.Height) { Canvas.SetTop(presenter, viewport.Height - totalheight); return; } } Canvas.SetTop(presenter, offset); }