Estoy creando una aplicación de demostración con la versión preliminar 0.5 de WinUI 3 (reunión del proyecto).
Me gustaría maximizar, minimizar y restaurar el estado de la ventana desde el código administrado de C#. ¿Hay ejemplos disponibles?
Aparentemente, esto no es posible usando código administrado en este momento. PInvoke es la única opción actualmente. Usé el paquete nuget PInvoke.User32.
Use la clase AppWindow del SDK de aplicaciones de Windows
// Retrieve the window handle (HWND) of the current (XAML) WinUI 3 window. IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this); // Retrieve the WindowId that corresponds to hWnd. WindowId windowId = Win32Interop.GetWindowIdFromWindow(hWnd); // Lastly, retrieve the AppWindow for the current (XAML) WinUI 3 window. AppWindow appWindow = AppWindow.GetFromWindowId(windowId); appWindow.Closing += AppWindow_Closing; private void AppWindow_Closing(AppWindow sender, AppWindowClosingEventArgs args) { args.Cancel = true; }https://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/windowing/windowing-overview
Aquí está mi implementación basada en el paquete nuget PInvoke.User32.
Versión usando el parámetro de ventana
public void MaximizeWindow(Window window) { var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window); PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE); }Versión usando el método de extensión
Este código anterior también se puede transformar en un método de extensión para la clase Window , por lo que puedo llamar a this.Maximize() desde la Window :
public static class WindowExtensions { public static void Maximize(this Window window) { var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window); PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE); } }Uso en su clase derivada de Windows:
esto.Maximizar();
Minimizar y Restaurar
La definición "PInvoke.User32.WindowShowStyle" utilizada en los ejemplos anteriores también contiene constantes para SW_MINIMIZE y SW_RESTORE , pero no probé esto.