62 lines
1.8 KiB
C#
62 lines
1.8 KiB
C#
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();
|
|
}
|
|
} |