using HearingProtector.Extensions; using Microsoft.UI.Windowing; using Microsoft.UI.Xaml; namespace HearingProtector; public sealed partial class MainWindow : Window { // Флаг: true, когда пользователь выбрал «Выход» в трее internal bool ReadyToClose { get; set; } public MainWindow() { InitializeComponent(); this.SetMicaStyle(AppTitleBar, new(400, 300), false, false); VersionText.Text = $"v{App.Version}"; AppWindow.Changed += AppWindow_Changed; AppWindow.Closing += AppWindow_Closing; } private void AppWindow_Changed(AppWindow sender, AppWindowChangedEventArgs args) { if (!args.DidPresenterChange) return; if (sender.Presenter is OverlappedPresenter p && p.State == OverlappedPresenterState.Minimized) { MinimizeToTray(); } } private void AppWindow_Closing(AppWindow sender, AppWindowClosingEventArgs args) { // Если пользователь явно выбрал «Выход» — пропускаем закрытие насквозь. if (ReadyToClose) return; // Иначе крестик/Alt+F4 сворачивают окно в трей, а не закрывают приложение. args.Cancel = true; MinimizeToTray(); } public void MinimizeToTray() { AppWindow.IsShownInSwitchers = false; AppWindow.Hide(); } public void RestoreFromTray() { AppWindow.Show(); AppWindow.IsShownInSwitchers = true; if (AppWindow.Presenter is OverlappedPresenter p && p.State == OverlappedPresenterState.Minimized) { p.Restore(); } Activate(); } }