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, } }