Skip to content

Commit 3c10c55

Browse files
committed
fix navigation with Up/Down/Home/End keys
1 parent b6772f7 commit 3c10c55

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,8 @@
504504
Package="{x:Bind Package}" Wrapper="{x:Bind Self}"
505505
RightTapped="PackageItemContainer_RightTapped"
506506
DoubleTapped="PackageItemContainer_DoubleTapped"
507-
KeyUp="PackageItemContainer_KeyUp">
507+
KeyUp="PackageItemContainer_KeyUp"
508+
PreviewKeyDown="PackageItemContainer_PreviewKeyDown">
508509

509510
<Grid ColumnSpacing="5" Opacity="{x:Bind ListedOpacity, Mode=OneWay}" Padding="12,3,8,3">
510511
<Grid.RowDefinitions>

src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)