从 BackRequested UWP 迁移到 WinUI-3

问题描述 投票:0回答:1

在 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 文件)!

提前致谢

c# uwp back-button winui-3
1个回答
0
投票

根据文档,WinUI3不支持SystemNavigationManager。这些 XxxForCurrentView 方法对

ApplicationView
类型有隐式依赖,这在桌面应用程序中不受支持。由于桌面应用程序不支持
ApplicationView
,因此也不支持任何 XxxForCurrentView 方法。一些不支持的 XxxForCurrentView 方法不仅返回 null,还会抛出异常 例外。

© www.soinside.com 2019 - 2024. All rights reserved.