diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerNone.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerNone.cs
index 959afe0065..56bb9299ae 100644
--- a/src/Avalonia.Controls/Presenters/ItemVirtualizerNone.cs
+++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerNone.cs
@@ -110,6 +110,21 @@ namespace Avalonia.Controls.Presenters
Owner.InvalidateMeasure();
}
+ ///
+ /// Scrolls the specified item into view.
+ ///
+ /// The item.
+ public override void ScrollIntoView(object item)
+ {
+ var index = Items.IndexOf(item);
+
+ if (index != -1)
+ {
+ var container = Owner.ItemContainerGenerator.ContainerFromIndex(index);
+ container.BringIntoView();
+ }
+ }
+
private IList AddContainers(int index, IEnumerable items)
{
var generator = Owner.ItemContainerGenerator;
diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
index 32e80e0566..1dca52f885 100644
--- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
+++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
@@ -163,6 +163,14 @@ namespace Avalonia.Controls.Presenters
switch (direction)
{
+ case NavigationDirection.First:
+ newItemIndex = 0;
+ break;
+
+ case NavigationDirection.Last:
+ newItemIndex = ItemCount - 1;
+ break;
+
case NavigationDirection.Up:
if (vertical)
{
@@ -199,14 +207,6 @@ namespace Avalonia.Controls.Presenters
case NavigationDirection.PageDown:
newItemIndex = Math.Min(ItemCount - 1, itemIndex + (int)ViewportValue);
break;
-
- case NavigationDirection.Home:
- newItemIndex = 0;
- break;
-
- case NavigationDirection.End:
- newItemIndex = ItemCount - 1;
- break;
}
return ScrollIntoView(newItemIndex);
diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs
index f5b3c20d5e..26a755e5f1 100644
--- a/src/Avalonia.Controls/StackPanel.cs
+++ b/src/Avalonia.Controls/StackPanel.cs
@@ -115,6 +115,9 @@ namespace Avalonia.Controls
case NavigationDirection.Down:
index = horiz ? -1 : index + 1;
break;
+ default:
+ index = -1;
+ break;
}
if (index >= 0 && index < Children.Count)
diff --git a/src/Avalonia.Input/KeyboardNavigationHandler.cs b/src/Avalonia.Input/KeyboardNavigationHandler.cs
index 41c15986c7..57da49fa03 100644
--- a/src/Avalonia.Input/KeyboardNavigationHandler.cs
+++ b/src/Avalonia.Input/KeyboardNavigationHandler.cs
@@ -124,10 +124,10 @@ namespace Avalonia.Input
direction = NavigationDirection.PageDown;
break;
case Key.Home:
- direction = NavigationDirection.Home;
+ direction = NavigationDirection.First;
break;
case Key.End:
- direction = NavigationDirection.End;
+ direction = NavigationDirection.Last;
break;
}
diff --git a/src/Avalonia.Input/NavigationDirection.cs b/src/Avalonia.Input/NavigationDirection.cs
index e04d08c6b2..fbaa7e74c7 100644
--- a/src/Avalonia.Input/NavigationDirection.cs
+++ b/src/Avalonia.Input/NavigationDirection.cs
@@ -57,15 +57,5 @@ namespace Avalonia.Input
/// Move the focus down a page.
///
PageDown,
-
- ///
- /// Move the focus to the first item.
- ///
- Home,
-
- ///
- /// Move the focus to the last item.
- ///
- End,
}
}