From 362745a55ec7df25a0f4060c47ecb4d89b11ae6e Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 21 May 2016 16:53:42 +0200 Subject: [PATCH] Fix scrolling algorithm --- .../Presenters/ThingamybobPresenter.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/ThingamybobPresenter.cs b/src/Avalonia.Controls/Presenters/ThingamybobPresenter.cs index 73fd0c8cfa..00f0c92535 100644 --- a/src/Avalonia.Controls/Presenters/ThingamybobPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ThingamybobPresenter.cs @@ -31,20 +31,26 @@ namespace Avalonia.Controls.Presenters { get { - return new Vector(0, _firstIndex * AverageItemSize); + return new Vector(0, (_firstIndex * AverageItemSize) + (_panel?.PixelOffset ?? 0)); } set { var count = _lastIndex - _firstIndex; - _firstIndex = (int)(value.Y / AverageItemSize); + var firstIndex = (int)(value.Y / AverageItemSize); + var firstIndexChanged = _firstIndex != firstIndex; + _firstIndex = firstIndex; _lastIndex = _firstIndex + count; _panel.PixelOffset = value.Y % AverageItemSize; - Renumber(); + + if (firstIndexChanged) + { + Renumber(); + } } } - Size IScrollable.Viewport => new Size(1, (_lastIndex - _firstIndex) * AverageItemSize); + Size IScrollable.Viewport => new Size(1, _panel?.Bounds.Height ?? 0); Size IScrollable.ScrollSize => new Size(0, 1); Size IScrollable.PageScrollSize => new Size(0, 1);