У меня есть приложение MAUI в .NET 8. Когда пользователь закрывает окно с панели задач или с помощью кнопки закрытия, приложение должно продолжать работать в области лотка, а не закрываться полностью. После некоторых исследований я нашел это решение, и оно работает так, как задумано. Но есть одна проблема при попытке отменить закрытое мероприятие. Maui.Controls.Window
и его Page
свойства уже уничтожаются. При повторном открытии окна из области лотка остается только пустое окно. Как я могу предотвратить закрытие окна до того, как его содержимое будет удалено?
Код решения , которое я упомянул в ссылке, приведен ниже. Это помещено в MainWindow.xaml.cs
protected override void OnHandlerChanged()
{
base.OnHandlerChanged();
#if WINDOWS
Microsoft.UI.Xaml.Window window = (Microsoft.UI.Xaml.Window)App.Current.Windows.First<Window>().Handler.PlatformView;
IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
Microsoft.UI.WindowId windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle);
Microsoft.UI.Windowing.AppWindow appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);
window.Closed += (o, e) =>
{
e.Handled = true;
// this line will cancel the closed event
(appWindow.Presenter as Microsoft.UI.Windowing.OverlappedPresenter).Minimize();
// this line will minimize the window
};
#endif
}
Вам просто нужно добавить приведенный ниже код, чтобы предотвратить закрытие окна до того, как его содержимое будет удалено. Кстати, пустое окно, как вы описали в своем посте, связано с тем, что AppWindow
было закрыто Window
.
appWindow.Closing += (o, e) =>{ e.Cancel = true; }