@@ -483,10 +483,16 @@ protected async Task LoadPackages(ReloadReason reason)
483483
484484 private void SelectAndScrollTo ( int index )
485485 {
486+ PackageWrapper packageWrapper = FilteredPackages [ index ] ;
486487 PackageList . Select ( index ) ;
487- PackageItemContainer ? selectedItem = PackageList . FindDescendant < PackageItemContainer > ( c => c . IsSelected ) ;
488- selectedItem ? . Focus ( FocusState . Programmatic ) ;
489- PackageList . StartBringItemIntoView ( index , new BringIntoViewOptions ( ) ) ;
488+ PackageList . StartBringItemIntoView ( FilteredPackages . IndexOf ( packageWrapper ) , new BringIntoViewOptions ( ) ) ;
489+
490+ PackageItemContainer ? packageToSelect = PackageList . FindDescendant < PackageItemContainer > ( c => c . Wrapper == packageWrapper ) ;
491+ if ( packageToSelect != null )
492+ {
493+ packageToSelect . IsSelected = true ;
494+ packageToSelect . Focus ( FocusState . Programmatic ) ;
495+ }
490496 }
491497
492498 public void PackageList_KeyDown ( object sender , KeyRoutedEventArgs e )
@@ -1066,5 +1072,28 @@ public void OnLeave()
10661072 Visibility = Visibility . Collapsed ;
10671073 IsEnabled = false ;
10681074 }
1075+
1076+ private void PackageItemContainer_PreviewKeyDown ( object sender , KeyRoutedEventArgs e )
1077+ {
1078+ if ( e . Key is not ( VirtualKey . Up or VirtualKey . Down or VirtualKey . Home or VirtualKey . End ) ||
1079+ sender is not PackageItemContainer packageItemContainer )
1080+ {
1081+ return ;
1082+ }
1083+
1084+ int index = FilteredPackages . IndexOf ( packageItemContainer . Wrapper ) ;
1085+ switch ( e . Key )
1086+ {
1087+ case VirtualKey . Up when index > 0 :
1088+ SelectAndScrollTo ( index - 1 ) ; break ;
1089+ case VirtualKey . Down when index < FilteredPackages . Count - 1 :
1090+ SelectAndScrollTo ( index + 1 ) ; break ;
1091+ case VirtualKey . Home when index > 0 :
1092+ SelectAndScrollTo ( 0 ) ; break ;
1093+ case VirtualKey . End when index < FilteredPackages . Count - 1 :
1094+ SelectAndScrollTo ( FilteredPackages . Count - 1 ) ; break ;
1095+ }
1096+ e . Handled = true ;
1097+ }
10691098 }
10701099}
0 commit comments