I'm creating a demo app using WinUI 3 prerelease 0.5 (project reunion).
I would like to maximize, minimize, and restore the window state from c# managed code. Are there any examples available?
I'm creating a demo app using WinUI 3 prerelease 0.5 (project reunion).
I would like to maximize, minimize, and restore the window state from c# managed code. Are there any examples available?
Apparently this is not possible using managed code at this time. PInvoke is the only option currenlty. I used PInvoke.User32 nuget package.
Use AppWindow
class from Windows App SDK
// 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://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/windowing/windowing-overview
Here is my implementation based on the PInvoke.User32 nuget package.
Version using Window parameter
public void MaximizeWindow(Window window)
{
var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE);
}
Version using extension method
This previous code can also be transformed into an extension method for the Window
class, so I can just call this.Maximize()
from within the 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);
}
}
Usage in your Window derived class:
this.Maximize();
Minize and Restore
The "PInvoke.User32.WindowShowStyle" definition used in the examples above contains also constants for SW_MINIMIZE
and SW_RESTORE
, but I did not test this.