如何从代码中最大化、最小化、恢复 WinUI window
How to Maximize, Minimize, Restore WinUI window from code
我正在使用 WinUI 3 预发行版 0.5(项目重聚)创建演示应用程序。
我想从 c# 托管代码最大化、最小化和恢复 window 状态。有可用的示例吗?
显然,此时使用托管代码无法做到这一点。 PInvoke 是当前唯一的选项。
我使用了 PInvoke.User32 nuget 包。
这是我基于 PInvoke.User32 nuget 包的实现。
使用Window参数的版本
public void MaximizeWindow(Window window)
{
var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE);
}
使用扩展方法的版本
前面的代码也可以转换为 Window
class 的扩展方法,所以我可以在 Window
中调用 this.Maximize()
:
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);
}
}
在您的 Window 派生中的用法 class:
this.Maximize();
最小化并恢复
上面示例中使用的“PInvoke.User32.WindowShowStyle”定义还包含 SW_MINIMIZE
和 SW_RESTORE
的常量,但我没有对此进行测试。
使用 AppWindow
class 来自 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://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/windowing/windowing-overview
我正在使用 WinUI 3 预发行版 0.5(项目重聚)创建演示应用程序。
我想从 c# 托管代码最大化、最小化和恢复 window 状态。有可用的示例吗?
显然,此时使用托管代码无法做到这一点。 PInvoke 是当前唯一的选项。 我使用了 PInvoke.User32 nuget 包。
这是我基于 PInvoke.User32 nuget 包的实现。
使用Window参数的版本
public void MaximizeWindow(Window window)
{
var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE);
}
使用扩展方法的版本
前面的代码也可以转换为 Window
class 的扩展方法,所以我可以在 Window
中调用 this.Maximize()
:
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);
}
}
在您的 Window 派生中的用法 class:
this.Maximize();
最小化并恢复
上面示例中使用的“PInvoke.User32.WindowShowStyle”定义还包含 SW_MINIMIZE
和 SW_RESTORE
的常量,但我没有对此进行测试。
使用 AppWindow
class 来自 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://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/windowing/windowing-overview