昨天我们学习了windows phone的简单导航,在具体学习导航操作之前我们还接触到了有关windows phone的框架知识,下面为大家简单介绍一下:
在一个WP程序运行的时候,程序的整个构架由1个windows,1个frame(现在暂且认为为一个),和多个page组成。如有多个page,则依次压入系统栈来执行,每显示一个page压栈,每按一次返回键退栈,直至栈空。比如有三个页面:mainpage,page1,page2则显示页面的先后顺序为mainpage,page1,page2(之后按返回键)page1,mainpage,主界面。
整个效果的实现原理如下:
当我在第一个页面时触发button事件,在后台执行以下代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
Frame fri =(Frame) Window.Current.Content;//定义一个frame类型的变量,括号里的内容代表强制转换, Window.Current.Content属性是指指定的frame所在的window对象
fri.Navigate(typeof(Page2));//表示fri将导航到Page2
}
同时当进入下一个页面的时候添加返回事件
protected override void OnNavigatedTo(NavigationEventArgs e)
{
HardwareButtons.BackPressed+=HardwareButtons_BackPressed
}
从第二个页面到第三个触发的button事件,返回事件也如此
因为整个程序只有一个返回事件,所以要实现上述效果应该在显示这个界面时添加事件,从这个界面退出时删除这个事件,在下面说一下返回事件的代码:
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
e.Handled=true;//该值指示事件处理程序是否已完整处理事件,true表示已处理过的
Frame fri=Window.Current.Content as Frame;//相当于fri现在是frame系统栈的名字
if (fri.CanGoBack)//意思说是栈不为空,即就是还有页面可以返回
{
fri.GoBack();//返回
}
else
App.Current.Exit();//结束这个程序
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
HardwareButtons.BackPressed -= HardwareButtons_BackPressed;//减去返回事件
}
这是一个页面的跳转与返回,之后的页面情况以此类推。
备注:这是第一次写博客,格式和表达都会有或多或少的不足,之后会慢慢改正,如果有表达和知识点的错误,请大家指出,谢谢。
作者:李璐