在 UWP 项目(适用于 PC 和平板电脑)中,我实现了 BackRequested,以便平板电脑可以通过平板电脑提供的默认按钮启动“返回上一页操作”,通过以下代码: 在我的页面的 Page.xaml 代码中没有进行任何更改。 在Page.xams.cs代码中:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += BackRequested;
...
}
private static async void BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
{
e.Handled = true;
// code for Back action
}
这个 UWP 代码效果很好! 我正在将此代码迁移到 WinUI-3。 如果前面的代码在WinUI-3下编译得很好,运行的时候却出现了一行崩溃:
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += BackRequested;
错误信息:
“System.AccessViolationException”类型的未处理异常 发生在 Microsoft.Windows.SDK.NET.dll 尝试读取或写入 受保护的内存。这通常表明其他内存正在使用 腐败。
是否可以通过进行最少的修改,特别是在不触及 Xaml 代码的情况下将此 UWP 代码迁移到 WinUI-3(因为我有 4403 个 *.xaml 文件)!
提前致谢
根据文档,WinUI3不支持SystemNavigationManager。这些 XxxForCurrentView 方法对
ApplicationView
类型有隐式依赖,这在桌面应用程序中不受支持。由于桌面应用程序不支持 ApplicationView
,因此也不支持任何 XxxForCurrentView 方法。一些不支持的 XxxForCurrentView 方法不仅返回 null,还会抛出异常
例外。