gpt4 book ai didi

c# - 后退按钮横行

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:53 25 4
gpt4 key购买 nike

在我的每个应用程序页面上,我都设置了后退按钮的功能,因为我希望它每次都执行不同的操作。但是,当我在一页上运行它时:

SystemNavigationManager.GetForCurrentView().BackRequested += (s, a) =>
{
Frame.Navigate(typeof(MainPage));
a.Handled = true;
};

它还会在我的另一个页面上运行后退按钮的功能,如果该页面首先被访问过。这会引发异常,因为它试图卸载一个不存在的项目。这不是为每页设置后退按钮功能的正确方法吗?

最佳答案

这是正确的行为,因为 SystemNavigationManager.GetForCurrentView() 返回相同的 SystemNavigationManager 因为它仍然是相同的 View (不是页面!),然后您有两个事件处理程序附加到事件。

如果您希望每个页面都有特定的事件处理程序,请使用 OnNavigatedTo 添加事件处理程序并使用 OnNavigatedFrom 删除事件处理程序:

public class BackButtonPage : Page
{
protected override void OnNavigatedTo(NavigationEventArgs e)
{
BackButtonVisibility = base.Frame.CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;

SystemNavigationManager.GetForCurrentView().BackRequested += BackButtonPage_BackRequested;

base.OnNavigatedTo(e);
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);

SystemNavigationManager.GetForCurrentView().BackRequested -= BackButtonPage_BackRequested;
}

private void BackButtonPage_BackRequested(object sender, BackRequestedEventArgs e)
{
OnBackRequested(sender, e);
}

protected virtual void OnBackRequested(object sender, BackRequestedEventArgs e)
{
//your page specific code here
Frame.Navigate(typeof(MainPage));
e.Handled = true;
}

public AppViewBackButtonVisibility BackButtonVisibility
{
get { return SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility; }
set { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = value; }
}
}

( source from Microsoft's examples on github )

关于c# - 后退按钮横行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com