Windows Phone8.1页面导航
作为一名windows phone8.1初学者,在我自己新开发的一个项目中,有经历过这么一个事情,比如程序运行,进入页面一,然后继续进入页面二,进入页面三。这时候我如果按物理返回键,直接退出程序了(其实是将程序挂起了,可以去后台看看,明显看到程序还在后台“运行”),在8.1中 物理返回键只是将程序挂起,不会返回到另一个界面。
在网上查询了一下,这是微软比较坑了,windows phone8.1采用的将物理返回键设为程序挂起,而不是退出程序或者返回上一个界面。要解决这种问题,其实很简单,就是在程序中添加虚拟物理键的返回事件,就是给他说,返回时候要干什么。
在全局App类中,初始化时候,注册物理返回键的事件。像这样
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
//注册物理返回键事件
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
async void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
//获取当前的激活的窗口的框架
Frame frame = Window.Current.Content as Frame;
//判断是否为空,是否能返回,其实就是主页面了,主页面肯定不能返回嘛
if (null != frame && (!frame.CanGoBack))
{
//设置事件已经处理
e.Handled = true;
//设置在最后一个界面跳出弹出窗口
var messageDig = new MessageDialog("确定退出吗?");
var btn_OK = new UICommand("确定");
var btn_NO = new UICommand("取消");
messageDig.Commands.Add(btn_OK);
messageDig.Commands.Add(btn_NO);
//展示窗口,获取按钮是否退出
var result = await messageDig.ShowAsync();
//如果是确定退出就直接让应用程序退出
if(null != result && result.Label == "确定")
{
Application.Current.Exit();
}
}
//如果可以返回,就返回上一个界面
else if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
程序运行效果图,如果是主页面,按返回键,就弹出那个窗口。
很简单吧(欢迎吐槽,初学者,今天查看突然发下没有效果图)