原文:Windows Phone开发(8):关于导航的小技巧

前文用几个例子对导航做了简单介绍,在一般应用中,使用上一篇文章中说到的方法,其实也够用了,不过,为了能够处理一些特殊的情况,有几个小技巧还是有必要了解一下的。

一、到底该不该设置“后退”操作?

因为手机的硬件层就有一个“回退”按钮,按理说我们不需要在程序中再添加什么回退按钮之类的,不过,还是有必要看看如何手动加入回退功能。

1、新建一个WP应用项目。

2、除默认的主页外,新建一个页面Page2.xaml。

3、在主页上放一个按钮,编写Click事件处理代码,导航到Page2。

        private void button1_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));
}

4、在Page2也放一个按钮,并编写单击事件处理代码。4、在Page2也放一个按钮,并编写单击事件处理代码。4、在Page2也放一个按钮,并编写单击事件处理代码。

        private void button1_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.GoBack();
}

5、现在,你可以欣赏你的程序了。

二、如何屏蔽掉“回退”按钮?

这种情况下不多见,屏蔽掉回退按钮意味着无法通过按下“回退”进行向后导航,这个做法要慎用。

要完成该操作,就得处理BackKeyPress事件,把事件参数e的Cancel属性设置为true即可取消“回退”键的操作。

            this.BackKeyPress += (sender, e) =>
{
e.Cancel = true;
};

三、如何删除导航历史记录?

比如说,我现在从主页导航到页面B,再从页面B导航到页面C,但我不希望用户导航回页面B,而是直接导航回主页。

准备三个页面做测试,从主页导航到B,从B导航到C,应该没问题了,不用我再重复。

然后,因为现在我们要在导航的回退历史记录中删除页面B,所以,我们在离开页面B后把历史记录删除。也就是说,在页面B中重写OnNavigatedFrom方法。

        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
PhoneApplicationFrame myFrame = Application.Current.RootVisual as PhoneApplicationFrame;
if (myFrame != null)
{
try
{
myFrame.RemoveBackEntry();
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message);
}
} }

从例子中看到,使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示:从例子中看到,使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示:

Windows Phone开发(8):关于导航的小技巧的更多相关文章

  1. Windows下程序打包发布时的小技巧

    一.背景 Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作 ...

  2. Android开发的那些坑和小技巧

    1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上 ...

  3. React Native底|顶部导航使用小技巧

    导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...

  4. React Native顶|底部导航使用小技巧

    导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...

  5. Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)

    Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作的博客,里 ...

  6. IOS开发之代理的设计小技巧

    1.关于代理对象的设计小技巧 在设计一个类,需要通过代理和协议来从外部获取需要的动态的数据.那么在这里设计使用代理会有两种方法. <第一种方法> 也是比较常见的: 在你设计的类中,声明一个 ...

  7. iOS 开发中使用到的小技巧汇总

    国庆即将来到,一个小项目也即将完成,把自己在项目中用的一些小技巧写出来,方便查找. 1,去掉分割线--动画设置透明度alpha //去掉tableView的分隔线:     self.tableVie ...

  8. (转)可简化iOS 应用程序开发的6个Xcode小技巧

    Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...

  9. iOS开发之软键盘使用小技巧

    在iOS开发过程中,有时候须要弹出软键盘进行输入,有时候又须要在某些情况下隐藏软键盘,以提高用户体验. 今天有几个关于软键盘的小技巧和大家分享. (1)仅仅弹出数字键盘 有某些需求中,要求用户仅仅能在 ...

随机推荐

  1. 强算KMeans聚类算法演示器

    这些天做C#实验以及这个KMeans算法演示器,学了一下openGL,感觉有待加强. //Point.h /* Point 结构体定义及实现 结构体重载了2个运算符: 1.== //推断两个Point ...

  2. Jexus web server V5.6.1正式公布

    Jexus v5.6.1已经正式公布,下载和技术支持站点是 www.linuxdot.net. 该版开发时间历时11个月,后期直接在大流量生产环境中进行调试和优化,其正确性.稳定性.大并发承载能力.A ...

  3. linux nc命令使用详解

    功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p ...

  4. 灵动标签的使用方法 ecms通过运行sql获取须要的记录

    在某些条件下,我们要求站点的某页上显示指定的信息, 可是这样的指定假设固定去用代码写死的话,对以后的修改将会是大麻烦: 这时候sql语句的优势就凸显出来,利用sql语句仅仅须要改改数字,就能让显示的内 ...

  5. NET单元测试的艺术

    NET单元测试的艺术 开篇:上一篇我们学习基本的单元测试基础知识和入门实例.但是,如果我们要测试的方法依赖于一个外部资源,如文件系统.数据库.Web服务或者其他难以控制的东西,那又该如何编写测试呢?为 ...

  6. VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布(好像很不错,有六张插图说明)good

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  7. POJ 3040 Allowance 贪心

    这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少 ...

  8. mysql登录报错 ERROR 1045 (28000)

    1.现象: [root@localhost ~]# mysql -u root -p Enter password:  ERROR 1045 (28000): Access denied for us ...

  9. HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM

    ROM版本 HTC One/M7 802d ROM作者 雪狼团队·大盛 http://weibo.com/DaShengdd Android版本 Android 4.2.2 创建日期 2013.09. ...

  10. I2C分析三

    1 引言 IIC (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备.它是同步通信的一种特殊形式,具有接口线少.控制方 ...