Browse Source

Merge branch 'master' into perf/property-selector-isregistered

pull/2087/head
Jumar Macato 8 years ago
committed by GitHub
parent
commit
0ad075f5e1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
  2. 41
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

11
src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

@ -517,7 +517,7 @@ namespace Avalonia.Controls.Presenters
if (index >= 0 && index < ItemCount)
{
if (index < FirstIndex)
if (index <= FirstIndex)
{
newOffset = index;
}
@ -525,10 +525,6 @@ namespace Avalonia.Controls.Presenters
{
newOffset = index - Math.Ceiling(ViewportValue - 1);
}
else if (OffsetValue + ViewportValue >= ItemCount)
{
newOffset = OffsetValue - 1;
}
if (newOffset != -1)
{
@ -546,6 +542,11 @@ namespace Avalonia.Controls.Presenters
{
layoutManager.ExecuteLayoutPass();
if (newOffset != -1 && newOffset != OffsetValue)
{
OffsetValue = newOffset;
}
if (panel.ScrollDirection == Orientation.Vertical)
{
if (container.Bounds.Y < panel.Bounds.Y || container.Bounds.Bottom > panel.Bounds.Bottom)

41
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

@ -717,6 +717,45 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Equal(10, target.Panel.Children.Count);
}
[Fact]
public void Scroll_To_Last_Should_Work()
{
var target = CreateTarget(itemCount: 11);
var scroller = (TestScroller)target.Parent;
scroller.Width = scroller.Height = 100;
scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
var last = (target.Items as IList)[10];
target.ScrollIntoView(last);
Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[9].DataContext, last);
}
[Fact]
public void Second_Scroll_To_Last_Should_Work()
{
var target = CreateTarget(itemCount: 11);
var scroller = (TestScroller)target.Parent;
scroller.Width = scroller.Height = 100;
scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
var last = (target.Items as IList)[10];
target.ScrollIntoView(last);
Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[9].DataContext, last);
target.ScrollIntoView(last);
Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[9].DataContext, last);
}
public class Vertical
{
[Fact]
@ -1090,4 +1129,4 @@ namespace Avalonia.Controls.UnitTests.Presenters
}
}
}
}
}

Loading…
Cancel
Save