diff --git a/src/UniGetUI.Avalonia/Assets/Styles/Styles.Common.axaml b/src/UniGetUI.Avalonia/Assets/Styles/Styles.Common.axaml
index 77f4a4c96c..9a4cfd00a7 100644
--- a/src/UniGetUI.Avalonia/Assets/Styles/Styles.Common.axaml
+++ b/src/UniGetUI.Avalonia/Assets/Styles/Styles.Common.axaml
@@ -13,6 +13,9 @@
+
+
+
@@ -35,6 +38,14 @@
+
+
+
+
+
+
+
+
@@ -78,6 +89,9 @@
+
+
+
@@ -99,6 +113,14 @@
+
+
+
+
+
+
+
+
@@ -147,6 +169,10 @@
+
+
@@ -157,6 +183,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -19,14 +36,14 @@
+ FontSize="14" Opacity="0.7"/>
-
+
-
+
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
-
-
+
-
+
+
+
+
+
+
+
+
+
+
@@ -174,7 +226,8 @@
@@ -182,18 +235,42 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+ FontFamily="Consolas,Cascadia Mono,Menlo,monospace"
+ FontSize="14"/>
+ FontFamily="Consolas,Cascadia Mono,Menlo,monospace"
+ FontSize="14"/>
+ FontFamily="Consolas,Cascadia Mono,Menlo,monospace"
+ FontSize="14"/>
-
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -236,7 +326,8 @@
+ FontFamily="Consolas,Cascadia Mono,Menlo,monospace"
+ FontSize="14"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -351,8 +492,8 @@
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml b/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml
index c7f0747af0..3e3f7fc38c 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml
@@ -3,23 +3,41 @@
xmlns:automation="clr-namespace:Avalonia.Automation;assembly=Avalonia.Controls"
xmlns:vm="using:UniGetUI.Avalonia.ViewModels"
xmlns:dialogs="using:UniGetUI.Avalonia.Views.DialogPages"
+ xmlns:chrome="using:Avalonia.Controls.Chrome"
x:Class="UniGetUI.Avalonia.Views.InstallOptionsWindow"
x:DataType="vm:InstallOptionsViewModel"
Width="680" MinWidth="500"
SizeToContent="Height"
CanResize="False"
Background="{DynamicResource AppDialogBackground}"
- Title="{Binding DialogTitle}">
+ WindowStartupLocation="CenterOwner"
+ Title="">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -38,6 +56,7 @@
Command="{Binding ProceedCommand}"/>
-
-
+
+
+
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml.cs b/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml.cs
index fb55d63a76..082979e708 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml.cs
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/InstallOptionsWindow.axaml.cs
@@ -1,4 +1,5 @@
using Avalonia.Controls;
+using Avalonia.Input;
using Avalonia.Threading;
using UniGetUI.Avalonia.ViewModels;
using UniGetUI.PackageEngine.Enums;
@@ -17,7 +18,12 @@ public InstallOptionsWindow(IPackage package, OperationType operation, InstallOp
var vm = new InstallOptionsViewModel(package, operation, options);
DataContext = vm;
InitializeComponent();
- UniGetUI.Avalonia.Infrastructure.MicaWindowHelper.Apply(this);
+
+ // Drop the OS title-bar strip but keep the system min/close buttons, extending the
+ // client area into the title-bar region (matches the Manage-ignored-updates window).
+ ExtendClientAreaToDecorationsHint = true;
+ ExtendClientAreaTitleBarHeightHint = -1;
+
vm.CloseRequested += (_, _) => Close();
}
@@ -26,4 +32,12 @@ protected override void OnOpened(EventArgs e)
base.OnOpened(e);
Dispatcher.UIThread.Post(OptionsControl.FocusProfileSelector, DispatcherPriority.Background);
}
+
+ // The client area is extended over the title bar, so provide window dragging from the
+ // transparent strip at the top.
+ private void TitleBar_PointerPressed(object? sender, PointerPressedEventArgs e)
+ {
+ if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
+ BeginMoveDrag(e);
+ }
}
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/ManageDesktopShortcutsWindow.axaml b/src/UniGetUI.Avalonia/Views/DialogPages/ManageDesktopShortcutsWindow.axaml
index bbd878834c..1e016a80d6 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/ManageDesktopShortcutsWindow.axaml
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/ManageDesktopShortcutsWindow.axaml
@@ -41,6 +41,7 @@
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml b/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml
index c7e8182267..57fc512135 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml
@@ -3,28 +3,55 @@
xmlns:automation="clr-namespace:Avalonia.Automation;assembly=Avalonia.Controls"
xmlns:vm="using:UniGetUI.Avalonia.ViewModels"
xmlns:controls="using:UniGetUI.Avalonia.Views.Controls"
+ xmlns:chrome="using:Avalonia.Controls.Chrome"
xmlns:t="using:UniGetUI.Avalonia.MarkupExtensions"
x:Class="UniGetUI.Avalonia.Views.ManageIgnoredUpdatesWindow"
x:DataType="vm:ManageIgnoredUpdatesViewModel"
- Width="900" MinWidth="520"
+ Width="1100" MinWidth="520"
Height="500" MinHeight="280"
CanResize="True"
ShowInTaskbar="False"
- Background="{DynamicResource AppDialogBackground}"
+ Background="{DynamicResource IgnoredDialogBackground}"
WindowStartupLocation="CenterOwner"
- Title="{Binding Title}">
+ Title="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
@@ -83,140 +110,94 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml.cs b/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml.cs
index 3897c61742..ec23a3c172 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml.cs
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/ManageIgnoredUpdatesWindow.axaml.cs
@@ -12,7 +12,14 @@ public ManageIgnoredUpdatesWindow()
var vm = new ManageIgnoredUpdatesViewModel();
DataContext = vm;
InitializeComponent();
- UniGetUI.Avalonia.Infrastructure.MicaWindowHelper.Apply(this);
+
+ // Drop the OS title-bar strip (its background clashed with the dialog) but keep
+ // the system min/max/close buttons floating over the extended client area. Default
+ // WindowDecorations (Full) keeps the system buttons; extending the client area
+ // merges the title-bar region into the content.
+ ExtendClientAreaToDecorationsHint = true;
+ ExtendClientAreaTitleBarHeightHint = -1;
+
vm.CloseRequested += (_, _) => Close();
}
@@ -21,7 +28,7 @@ protected override void OnOpened(EventArgs e)
base.OnOpened(e);
Dispatcher.UIThread.Post(() =>
{
- if (IgnoredUpdatesGrid.IsVisible)
+ if (((ManageIgnoredUpdatesViewModel)DataContext!).HasEntries)
IgnoredUpdatesGrid.Focus();
else
ResetButton.Focus();
diff --git a/src/UniGetUI.Avalonia/Views/DialogPages/PackageDetailsWindow.axaml b/src/UniGetUI.Avalonia/Views/DialogPages/PackageDetailsWindow.axaml
index de84f78426..391f000f2c 100644
--- a/src/UniGetUI.Avalonia/Views/DialogPages/PackageDetailsWindow.axaml
+++ b/src/UniGetUI.Avalonia/Views/DialogPages/PackageDetailsWindow.axaml
@@ -142,9 +142,9 @@
VerticalAlignment="Center"
Spacing="4">
@@ -223,7 +223,7 @@
VerticalAlignment="Center"/>
@@ -215,7 +215,7 @@
@@ -71,6 +76,7 @@
HorizontalAlignment="Center"
automation:AutomationProperties.Name="{t:Translate UniGetUI Homepage}">
@@ -82,6 +88,7 @@
HorizontalAlignment="Center"
automation:AutomationProperties.Name="{t:Translate Report an issue or submit a feature request}">
@@ -93,6 +100,7 @@
HorizontalAlignment="Center"
automation:AutomationProperties.Name="{t:Translate UniGetUI Repository}">
diff --git a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Contributors.axaml b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Contributors.axaml
index a414289923..c9e5a72217 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Contributors.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Contributors.axaml
@@ -13,10 +13,12 @@
@@ -41,6 +43,7 @@
diff --git a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/ThirdPartyLicenses.axaml b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/ThirdPartyLicenses.axaml
index f7613aa8d7..c522a6ca8a 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/ThirdPartyLicenses.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/ThirdPartyLicenses.axaml
@@ -13,18 +13,22 @@
@@ -35,6 +39,7 @@
Margin="0,2">
@@ -57,6 +63,7 @@
HorizontalAlignment="Right"
automation:AutomationProperties.Name="{Binding HomepageText}">
diff --git a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Translators.axaml b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Translators.axaml
index 380492408c..76e05dcbaf 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Translators.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/AboutPages/Translators.axaml
@@ -13,10 +13,12 @@
@@ -40,6 +43,7 @@
@@ -56,6 +60,7 @@
diff --git a/src/UniGetUI.Avalonia/Views/Pages/LogPages/BaseLogPage.axaml b/src/UniGetUI.Avalonia/Views/Pages/LogPages/BaseLogPage.axaml
index dd056d2ce6..332aaa785d 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/LogPages/BaseLogPage.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/LogPages/BaseLogPage.axaml
@@ -36,6 +36,7 @@
VerticalAlignment="Center">
@@ -52,6 +54,7 @@
@@ -79,6 +82,7 @@
@@ -97,6 +101,7 @@
CornerRadius="0,0,8,8"/>
@@ -108,6 +113,7 @@
CornerRadius="8"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Backup.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Backup.axaml
index 6428470f8a..a55bd83500 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Backup.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Backup.axaml
@@ -14,6 +14,7 @@
@@ -23,7 +24,7 @@
-
+
@@ -60,6 +61,7 @@
@@ -165,6 +168,7 @@
CommandParameter="{Binding $self}"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/General.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/General.axaml
index d34aedcaa8..403a2dbd43 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/General.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/General.axaml
@@ -14,6 +14,7 @@
@@ -22,6 +23,7 @@
CornerRadius="8"/>
@@ -43,6 +45,7 @@
BorderThickness="1,0,1,1"/>
@@ -54,6 +57,7 @@
CommandParameter="{Binding $self}"/>
@@ -65,6 +69,7 @@
StateChangedCommand="{Binding ToggleRedactUsernameCommand}"/>
@@ -89,6 +94,7 @@
CommandParameter="{Binding $self}"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/InstallOptionsPanel.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/InstallOptionsPanel.axaml
index f3e94db8cc..79e0654a73 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/InstallOptionsPanel.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/InstallOptionsPanel.axaml
@@ -21,6 +21,7 @@
@@ -163,11 +168,13 @@
Grid.Row="0" Grid.Column="0"
Text="{Binding InstallArgsLabel}"
VerticalAlignment="Center"
+ FontSize="14"
Opacity="{Binding CliOpacity}"/>
@@ -175,11 +182,13 @@
Grid.Row="1" Grid.Column="0"
Text="{Binding UpdateArgsLabel}"
VerticalAlignment="Center"
+ FontSize="14"
Opacity="{Binding CliOpacity}"/>
@@ -187,11 +196,13 @@
Grid.Row="2" Grid.Column="0"
Text="{Binding UninstallArgsLabel}"
VerticalAlignment="Center"
+ FontSize="14"
Opacity="{Binding CliOpacity}"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Interface_P.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Interface_P.axaml
index ad2506ceec..04f892018c 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Interface_P.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Interface_P.axaml
@@ -14,6 +14,7 @@
@@ -38,6 +39,7 @@
@@ -57,6 +59,7 @@
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Internet.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Internet.axaml
index 5b465128d9..7cf8d544c7 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Internet.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Internet.axaml
@@ -13,6 +13,7 @@
@@ -48,6 +49,7 @@
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Notifications.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Notifications.axaml
index ae8d97bb3c..5bd97e2ac0 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Notifications.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Notifications.axaml
@@ -14,12 +14,14 @@
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Operations.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Operations.axaml
index f1c2a194af..fbf3376a06 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Operations.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Operations.axaml
@@ -14,6 +14,7 @@
@@ -39,6 +40,7 @@
CornerRadius="8"/>
@@ -50,6 +52,7 @@
CornerRadius="8"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml
index 8ee806e013..1e0b5692f0 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml
@@ -53,6 +53,7 @@
@@ -79,8 +80,8 @@
@@ -92,11 +93,11 @@
-
+
-
+
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml.cs b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml.cs
index 5f0c54e948..0ddb4b046d 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml.cs
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/PackageManagerPage.axaml.cs
@@ -206,7 +206,7 @@ private void BuildPage()
};
var pathLabel = new TextBlock
{
- FontFamily = new FontFamily("Courier New"),
+ FontFamily = new FontFamily("Consolas,Cascadia Mono,Menlo,monospace"),
FontSize = 14,
TextWrapping = TextWrapping.Wrap,
};
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/SettingsBasePage.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/SettingsBasePage.axaml
index 61ab64b61b..134147d743 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/SettingsBasePage.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/SettingsBasePage.axaml
@@ -29,8 +29,8 @@
Path="avares://UniGetUI.Avalonia/Assets/Symbols/backward.svg"/>
@@ -47,6 +47,7 @@
@@ -86,6 +87,7 @@
Text="{Binding Url}"
VerticalAlignment="Center"
Classes="hyperlink"
+ FontSize="14"
TextTrimming="CharacterEllipsis"
Margin="8,0"/>
@@ -123,13 +125,15 @@
PlaceholderText="{Binding NameHint}"
Text="{Binding NewSourceName}"
IsEnabled="{Binding NameUrlEditable}"
- FontFamily="Courier New"
+ FontFamily="Consolas,Cascadia Mono,Menlo,monospace"
+ FontSize="14"
automation:AutomationProperties.Name="{Binding NameHint}"/>
diff --git a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Updates.axaml b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Updates.axaml
index 1cdd3d3f99..6d74a18c0c 100644
--- a/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Updates.axaml
+++ b/src/UniGetUI.Avalonia/Views/Pages/SettingsPages/Updates.axaml
@@ -14,6 +14,7 @@
@@ -32,6 +33,7 @@
IsEnabled="{Binding IsAutoCheckEnabled}"/>
@@ -62,6 +64,7 @@
IsEnabled="{Binding IsAutoCheckEnabled}"/>
@@ -90,6 +93,7 @@
Margin="0,8,0,0"/>
diff --git a/src/UniGetUI.Avalonia/Views/SidebarView.axaml b/src/UniGetUI.Avalonia/Views/SidebarView.axaml
index 81c5535dd2..cf4617ac21 100644
--- a/src/UniGetUI.Avalonia/Views/SidebarView.axaml
+++ b/src/UniGetUI.Avalonia/Views/SidebarView.axaml
@@ -27,7 +27,7 @@
Padding="8,10,8,0">
-
@@ -35,8 +35,8 @@
@@ -52,7 +52,7 @@
-
@@ -60,7 +60,7 @@
@@ -94,7 +94,7 @@
-
@@ -102,7 +102,7 @@
@@ -119,7 +119,7 @@
-
@@ -127,7 +127,7 @@
@@ -150,58 +150,53 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/src/UniGetUI.Avalonia/Views/SidebarView.axaml.cs b/src/UniGetUI.Avalonia/Views/SidebarView.axaml.cs
index 286ef2f129..5bdf240b8e 100644
--- a/src/UniGetUI.Avalonia/Views/SidebarView.axaml.cs
+++ b/src/UniGetUI.Avalonia/Views/SidebarView.axaml.cs
@@ -1,6 +1,11 @@
using Avalonia;
+using Avalonia.Animation;
+using Avalonia.Animation.Easings;
using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
using Avalonia.Input;
+using Avalonia.Media;
+using Avalonia.Styling;
using UniGetUI.Avalonia.ViewModels;
namespace UniGetUI.Avalonia.Views;
@@ -32,15 +37,20 @@ protected override void OnDataContextChanged(EventArgs e)
{
base.OnDataContextChanged(e);
if (DataContext is SidebarViewModel vm)
+ {
vm.PropertyChanged += (_, args) =>
{
if (args.PropertyName == nameof(SidebarViewModel.SelectedPageType))
SyncListBoxSelection(vm.SelectedPageType);
};
+ // The startup page may already be set before this view subscribes, so apply it now.
+ SyncListBoxSelection(vm.SelectedPageType);
+ }
}
private void SyncListBoxSelection(PageType page)
{
+ // Selection lives in two ListBoxes (main + footer); only one may hold a selection at a time.
_lastNavItemSelectionWasAuto = true;
NavListBox.SelectedItem = page switch
{
@@ -50,20 +60,57 @@ private void SyncListBoxSelection(PageType page)
PageType.Bundles => BundlesNavBtn,
_ => null,
};
+ FooterNavListBox.SelectedItem = page switch
+ {
+ PageType.Settings => SettingsNavBtn,
+ PageType.Managers => ManagersNavBtn,
+ _ => null,
+ };
_lastNavItemSelectionWasAuto = false;
}
private void NavListBox_SelectionChanged(object? sender, SelectionChangedEventArgs e)
+ => HandleNavSelectionChanged(NavListBox.SelectedItem);
+
+ private void FooterNavListBox_SelectionChanged(object? sender, SelectionChangedEventArgs e)
+ => HandleNavSelectionChanged(FooterNavListBox.SelectedItem);
+
+ private void HandleNavSelectionChanged(object? selectedItem)
{
if (_lastNavItemSelectionWasAuto) return;
- if (NavListBox.SelectedItem is ListBoxItem item && item.Tag is string tag
- && Enum.TryParse(tag, out var pageType))
+ if (selectedItem is not ListBoxItem item || item.Tag is not string tag) return;
+
+ if (tag == "More")
+ {
+ // Not a page: re-sync selection so "More" doesn't stay highlighted, then open its menu.
+ SyncListBoxSelection(ViewModel?.SelectedPageType ?? PageType.Null);
+ FlyoutBase.ShowAttachedFlyout(item);
+ return;
+ }
+
+ if (Enum.TryParse(tag, out var pageType))
ViewModel?.RequestNavigation(pageType.ToString());
}
+ // One full gear rotation on click, mirroring the spin of WinUI's AnimatedSettingsVisualSource.
+ // The TransformAnimator manages the icon's RenderTransform, so the animation runs on the Visual itself.
+ private readonly Animation _settingsIconSpin = new()
+ {
+ Duration = TimeSpan.FromSeconds(0.5),
+ Easing = new CubicEaseOut(),
+ Children =
+ {
+ new KeyFrame { Cue = new Cue(0d), Setters = { new Setter(RotateTransform.AngleProperty, 0d) } },
+ new KeyFrame { Cue = new Cue(1d), Setters = { new Setter(RotateTransform.AngleProperty, 360d) } },
+ },
+ };
+
+ private void SettingsNavBtn_Tapped(object? sender, TappedEventArgs e)
+ => _ = _settingsIconSpin.RunAsync(SettingsIcon);
+
public void FocusSelectedItem()
{
- if (NavListBox.SelectedItem is InputElement item)
+ if ((NavListBox.SelectedItem ?? FooterNavListBox.SelectedItem) is InputElement item)
item.Focus();
else
NavListBox.Focus();
diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml b/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml
index a3b591a88d..0298392b89 100644
--- a/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml
+++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/AbstractPackagesPage.axaml
@@ -21,8 +21,25 @@
+
+
+
+
+