如何获取默认打开的主AppWindow实例?
获取AppWindow实例并监听关闭事件实现方案
可以通过Windows UI相关的WinRT接口实现该需求,具体操作如下:
1 获取默认AppWindow实例
根据应用类型不同,获取方式分为两类:
1.1 UWP应用
使用Windows.UI.WindowManagement命名空间下的接口获取:
using Windows.UI.WindowManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; // 直接从当前XAML窗口关联得到AppWindow实例 var appWindow = XamlWindowHost.GetAppWindowFromXamlWindow(Window.Current);
1.2 WinUI 3 桌面应用
使用Microsoft.UI.Windowing命名空间下的接口获取:
using Microsoft.UI.Xaml; using Microsoft.UI.Windowing; using WinRT.Interop; // 这里替换为你应用的主窗口实例,单窗口应用可直接用Window.Current Window mainWindow = Window.Current; IntPtr hWnd = WindowNative.GetWindowHandle(mainWindow); WindowId windowId = Win32Interop.GetWindowIdFromWindow(hWnd); AppWindow appWindow = AppWindow.GetFromWindowId(windowId);
2 监听窗口关闭事件
拿到AppWindow实例后,订阅Closing事件即可实现关闭逻辑监听和拦截:
// 注册关闭事件监听 appWindow.Closing += OnAppWindowClosing; // 事件处理逻辑 private void OnAppWindowClosing(AppWindow sender, AppWindowClosingEventArgs args) { // 自定义处理逻辑,例如弹窗提示用户确认关闭 // 若需要拦截关闭操作,设置args.Cancel = true即可 }
注意事项
- UWP和WinUI 3的AppWindow分属不同命名空间,不要混用,功能和调用逻辑基本一致
- 仅用户主动触发窗口关闭、应用内调用关闭接口时会触发该事件,应用被系统后台回收的场景不会触发
内容的提问来源于stack exchange,提问作者Vasiliy F
相关产品推荐
相关产品推荐

