using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; namespace GSS2.UI.Core.Services; public class NavigationService { private readonly Stack _navigateControls = new Stack(); private readonly IApplicationLifetime? _applicationLifetime; public NavigationService(IApplicationLifetime? applicationLifetime) { _applicationLifetime = applicationLifetime; } public void NavigateTo(UserControl control) { _navigateControls.Push(control); switch (_applicationLifetime) { case IClassicDesktopStyleApplicationLifetime desktop when desktop.MainWindow is MainWindow mainWindow: mainWindow.SetControl(control); break; case ISingleViewApplicationLifetime singleView: singleView.MainView = control; break; } } public void NavigateBack() { if (_navigateControls.Count <= 1) return; var lastControl = _navigateControls.Pop(); var control = _navigateControls.Peek(); switch (_applicationLifetime) { case IClassicDesktopStyleApplicationLifetime desktop when desktop.MainWindow is MainWindow mainWindow: mainWindow.SetControl(control); break; case ISingleViewApplicationLifetime singleView: singleView.MainView = control; break; } if (lastControl is IDisposable disposable) disposable.Dispose(); } }