BackButton事件关闭Windows 10应用程序

本文关键字:应用程序 Windows 事件 BackButton | 更新日期: 2023-09-27 18:18:00

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

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

On my App.xaml.cs

protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        if (System.Diagnostics.Debugger.IsAttached)
        {
            this.DebugSettings.EnableFrameRateCounter = true;
        }
        Frame rootFrame = Window.Current.Content as Frame;
        if (rootFrame == null)
        {
            rootFrame = new Frame();
            rootFrame.NavigationFailed += OnNavigationFailed;
            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }
            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }
        if (rootFrame.Content == null)
        {
            // When the navigation stack isn't restored navigate to the first page,
            // configuring the new page by passing required information as a navigation
            // parameter
            rootFrame.Navigate(typeof(Frame1), e.Arguments);
        }
        // Ensure the current window is active
        Window.Current.Activate();
    }

On my Frame1.xaml.cs:

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();
        }
    }

On my Frame2.xaml.cs:

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();
        }
    }

On my Frame3.xaml.cs:

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();
        } 
    }

BackButton事件关闭Windows 10应用程序

这是因为您添加到BackPressed事件的事件处理程序将以FIFO顺序触发,因此您的事件处理程序堆栈根据您的代码是:

当你在Page1:

1。关闭应用

当你导航到Page2:

1。关闭应用

2。关闭应用

当你从Page2导航到Page3时:

1。关闭应用

2。关闭应用

3。返回到最后一页

所以当你在Page3中按后退按钮时,第一个处理程序应该首先触发,这意味着它是close app而不是going back到最后一页。

那么如何解决这个问题呢?

在你的每一页:

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事件,当你进入一个页面,你注册一个新的,使其工作