设为首页 收藏本站
查看: 1207|回复: 0

Windows Phone 7 开发探索笔记5——页面间导航

[复制链接]

尚未签到

发表于 2015-5-8 11:42:17 | 显示全部楼层 |阅读模式
  本文将介绍如何在Silverlight for Windows Phone中进行页面间导航(跳转)操作。
  一.NavigationService
  页面间的导航操作需要通过NavigationService类来实现。首先来看演示程序的XAML代码和截图(我在项目中添加了一个页面):
  页面1的XAML:

DSC0000.gif DSC0001.gif 代码


            
               
               
               
               
            
  页面2的XAML:

代码


            
               
               
            
  截图:
    DSC0002.jpg DSC0003.jpg
  我在第1个页面中添加了一个HyperlinkButton。HyperlinkButton生来就是用作导航的,它有一个NavigateUri属性,将这个属性设置为SubPage.xaml,点击它时会自动导航到那个页面。Button并没有这个属性,所以我需要在Code-Behind文件中添加如下代码:


this.NavigationService.Navigate(new Uri("/SubPage.xaml", UriKind.Relative));  
  NavigationService属性是定义在Page类中的,类型为NavigationService。此类型包含以下主要属性,方法和事件:
  属性:
  CanGoBack
  获取一个值,指示后退导航历史记录中是否至少有一个条目。
CanGoForward
获取一个值,指示前进导航历史记录中是否至少有一个条目。
  CurrentSource
  获取当前显示的内容的统一资源标识符 (URI)。
  Source
获取或设置当前内容或要导航到的内容的统一资源标识符 (URI)。

  方法:
  GoBack
  导航到后退导航历史记录中的最新条目,如果后退导航时没有条目,则引发异常。
  GoForward
  导航到前进导航历史记录中的最新条目,如果前进导航时没有条目,则引发异常。
  Navigate
  导航到统一资源标识符 (URI) 指定的内容。
  StopLoading
停止尚未处理的异步导航。

  事件:
  FragmentNavigation
  在开始导航到内容片段时发生。
  Navigated
  当找到正导航到的内容且此内容可用时发生。
  Navigating
  在请求新导航时发生。
  NavigationFailed
如果在导航到所请求的内容时出现错误,则会发生此事件。
  NavigationStopped
在调用 StopLoading方法时发生,或者在当前导航正在进行过程中又请求一个新导航时发生。

最常用的方法是Navigate( )方法,它需要一个Uri类的参数,所以我们需要将相应的路径封装到一个Uri类中。在页面2中那个Button的Click事件处理程序里我添加了如下的代码:

if (this.NavigationService.CanGoBack)
    NavigationService.GoBack();
  首先,检测后退导航历史中是否有条目,如果在没有条目的情况下调用GoBack方法会引发异常,如下图(我在页面1的事件处理程序中使用了GoBack方法):
DSC0004.jpg

  当然,在第2页的Click事件中也可以不使用GoBack,而用Navigate( )方法,如下:
  

this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));  
  但这和GoBack方法有本质区别。为什么这么说呢:因为无论是使用HyperlinkButton的NavigateUri属性还是NavigationService类的Navigate方法,系统都会为要导航到的页面创建一个全新的实例并显示它,这些都是在幕后完成的,对我们来说是透明的。但GoBack方法是从后退导航历史中查找最近的一个页面并加载它,并没有创建实例的动作。
  
  下面来验证一下:运行程序,在页面1中的文本框中输入一些文本
DSC0005.jpg
  然后点击按钮导航到页面2
DSC0006.jpg
  点击页面2中的按钮,呈现出来的页面1里面的文本框是空的。
DSC0007.jpg
  这时如果点击2次“返回”按钮,会按下面的顺序显示
DSC0008.jpg
DSC0009.jpg
  出现这种情况的原因就是因为页面2中使用了NavigationService类的Navigate方法,所以在点击按钮时创建了页面1的一个全新的实例,新实例的文本框肯定是没有内容的。也就是说现在后退历史中有3个页面:初始的页面1,目标导航页面2,新生成的页面1。所以会产生上面的情景。
  Silverlight for Windows Phone中的导航系统基于一个类似栈的结构,姑且把它叫做“后退栈”。当一个发起导航请求的页面调用Navigate方法时,这个页面首先会被压入后退栈,然后会创建那个目标页面并显示。当一个页面调用GoBack()方法或者在我们按下“返回”按钮时,当前的这个页面就会被抛弃,后退栈顶部的页面就会被弹出并显示。
  二.不一样的GoForward方法
  Silverlight for Windows Phone使用了与标准Silverlight相同的NavigationService类和页面模型,但Windows Phone的文档中并没有说清楚,看似Silverlight for Windows Phone中支持后退和前进导航,其实它并不支持前进导航。NavigationService类的CanGoForward属性总是为False.在Windows Phone中GoForward方法总会抛出异常,因为Windows Phone只有“后退栈”,没有“前进栈”。如果想在程序中实现向前导航的话,只能手动添加相应的按钮或菜单了。
  好了,关于页面导航就说这么多,下篇文章会介绍如何在页面间传递数据。
  三.下载示例代码:
  WindowsPhoneNavigationDemo.zip
  如果大家喜欢我的文章,请点击“推荐”,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-64956-1-1.html 上篇帖子: Windows Phone 7 播放视频 下篇帖子: Windows Phone 7 开发探索笔记3——触控操作之GestureListener
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表