IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Windows Phone Runtime 8.1 按返回键彻底关闭App

    汪宇杰发表于 2014-11-23 01:35:06
    love 0

    Windows Phone Runtime 8.1里面的坑不止一点点,最明显的是很多应用以前可以通过按返回键关闭,但是在8.1之后,如果你用了WinRT的runtime写程序,就会发现返回键的行为仅仅是返回WP的主屏幕,而不是关闭App。长按返回键你会发现你的App是被“最小化”在后台了。WP8.1的新版日历应用也是这样。

    虽然这对系统性能没有什么影响,但是让处女座用户看见了就会感觉不爽,所以我们还是把它改掉吧。

    WinRT里面这个硬件返回按钮是有专门的事件的:HardwareButtons.BackPressed。我们需要处理的情况仅仅是在应用的主页面上,按手机返回按钮关闭App,所以不需要override全局的HardwareButtons.BackPressed事件。只需要在主页面(通常是MainPage.xaml.cs)里override两个导航事件:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        //this.navigationHelper.OnNavigatedTo(e);
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtonsOnBackPressed;
    }
    
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        //this.navigationHelper.OnNavigatedFrom(e);
        Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtonsOnBackPressed;
    }

    被我注掉的那段,如果你用的模板是Blank App,那就是木有的,所以你不用在意,反正注掉了也没用了。

    关闭App很简单:

    Application.Current.Exit();

    但是我们希望退出App时候给用户确认提示,现在好多App都喜欢这么做。所以可以放个提示框进来。先给出最终的代码:

    async private void HardwareButtonsOnBackPressed(object sender, BackPressedEventArgs e)
    {
        e.Handled = true;
    
        if (!Frame.CanGoBack)
        {
            var dig = new MessageDialog("Are you sure you want to close this app?", "Confirm");
            var btnOk = new UICommand("Yes");
            dig.Commands.Add(btnOk);
            var btnCancel = new UICommand("No");
            dig.Commands.Add(btnCancel);
            
            var result = await dig.ShowAsync();
            if (null != result && result.Label == "Yes")
            {
                Application.Current.Exit();
            }
        }
    }

    里面需要注意的是,必须一开始执行:

    e.Handled = true;

    这会告诉系统,此处的硬件返回按钮的行为我们已经自己撸掉了,不用系统默认行为。如果你不写这句,那么你会发现提示框虽然弹出了,但还没等你来得及按,应用就被“最小化”了。

    另外,WinRT里面的后退按钮是按照Application History Stack后退的,而不是Silverlight Runtime里面那样按照Page History Stack后退,所以要小心别被坑哦~

    最后的效果:



沪ICP备19023445号-2号
友情链接