0.9.0
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user