Selaa lähdekoodia

Fix directional nav for non-virtualized lists.

Except Page Up/Down - these will need some extra code.
Steven Kirk 9 vuotta sitten
vanhempi
sitoutus
22b495b1ac

+ 15 - 0
src/Avalonia.Controls/Presenters/ItemVirtualizerNone.cs

@@ -110,6 +110,21 @@ namespace Avalonia.Controls.Presenters
             Owner.InvalidateMeasure();
         }
 
+        /// <summary>
+        /// Scrolls the specified item into view.
+        /// </summary>
+        /// <param name="item">The item.</param>
+        public override void ScrollIntoView(object item)
+        {
+            var index = Items.IndexOf(item);
+
+            if (index != -1)
+            {
+                var container = Owner.ItemContainerGenerator.ContainerFromIndex(index);
+                container.BringIntoView();
+            }
+        }
+
         private IList<ItemContainerInfo> AddContainers(int index, IEnumerable items)
         {
             var generator = Owner.ItemContainerGenerator;

+ 8 - 8
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);

+ 3 - 0
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)

+ 2 - 2
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;
                 }
 

+ 0 - 10
src/Avalonia.Input/NavigationDirection.cs

@@ -57,15 +57,5 @@ namespace Avalonia.Input
         /// Move the focus down a page.
         /// </summary>
         PageDown,
-
-        /// <summary>
-        /// Move the focus to the first item.
-        /// </summary>
-        Home,
-
-        /// <summary>
-        /// Move the focus to the last item.
-        /// </summary>
-        End,
     }
 }