Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackButton事件关闭应用程序Windows 10应用程序_C#_Xaml_Windows 10 - Fatal编程技术网

C# BackButton事件关闭应用程序Windows 10应用程序

C# BackButton事件关闭应用程序Windows 10应用程序,c#,xaml,windows-10,C#,Xaml,Windows 10,我目前正在为Windows 10开发一个应用程序。我想在我的应用程序上实现后退按钮事件。当我按下Frame1上的back按钮时,应用程序关闭,这是我想要做的。当我在第2帧,导航到第3帧,并按下后退按钮时,应用程序自动关闭 我想要的是Frame3上的back按钮事件使Frame3返回Frame2,当我按下Frame2上的back按钮时,终止应用程序 在我的App.xaml.cs上 在my Frame1.xaml.cs上: 在my Frame2.xaml.cs上: 在my Frame3.xaml.c

我目前正在为Windows 10开发一个应用程序。我想在我的应用程序上实现后退按钮事件。当我按下Frame1上的back按钮时,应用程序关闭,这是我想要做的。当我在第2帧,导航到第3帧,并按下后退按钮时,应用程序自动关闭

我想要的是Frame3上的back按钮事件使Frame3返回Frame2,当我按下Frame2上的back按钮时,终止应用程序

在我的App.xaml.cs上 在my Frame1.xaml.cs上: 在my Frame2.xaml.cs上: 在my Frame3.xaml.cs上:
这是因为您添加到BackPressed事件的事件处理程序将按FIFO顺序启动,因此您的事件处理程序堆栈根据您的代码如下所示:

当您处于第1页时:

1.关闭应用程序

导航到第2页时:

1.关闭应用程序

2.关闭应用程序

从第2页导航到第3页时:

1.关闭应用程序

2.关闭应用程序

3.返回到最后一页

因此,当您在第3页按下后退按钮时,第一个处理程序应该首先启动,这意味着它将
关闭应用程序
,而不是
返回到最后一页

那么如何解决这个问题呢

在您的每个页面中:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            HardwareButtons.BackPressed += HardwareButtons_BackPressed;
        }
protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
        }

这意味着,无论何时离开此页面,您都将取消注册Backpressed事件,并且当您输入一个页面时,您将注册一个新页面以使其正常工作。

您知道@JuniperPhoton是什么吗?谢谢^^成功了
private void 1_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
    {
        Frame frame1 = Window.Current.Content as Frame;
        if (frame1 != null)
        {
            e.Handled = true;
            Application.Current.Exit();
        }
    }
private void 2_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
    {
        Frame frame2= Window.Current.Content as Frame;
        if (frame2 != null)
        {
            e.Handled = true;
            Application.Current.Exit();
        }
    }
private void 3_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
    {
        Frame frame3= Window.Current.Content as Frame;

        if (frame3.CanGoBack)
        {
            e.Handled = true;
            frame3.GoBack();
        } 
    }
protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            HardwareButtons.BackPressed += HardwareButtons_BackPressed;
        }
protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
        }