博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Windows Phone 31日谈——第3日:返回键

Posted on 2011-03-03 13:29  星尘的天空  阅读(210)  评论(0编辑  收藏  举报

昨天,我们讨论了页面导航,以及如何简单的调用NavigationService从而到达程序中的不同页面。简要地提到了返回键,但返回键的复杂性是值得在本系列中单独成文的,主要是因为你可以重写(override) 返回键的行为。

返回键如何工作

和浏览器中的返回按钮很相似。你可以点击它通过会话的决策信息后退。它能让你跨越多个站点,还有这些站点中的每个页面。Windows Phone中的返回键工作方式与之相同。它能让你回到之前访问过的页面,甚至是跨应用程序!

例如,如果我:

  1. 打开人物中心(People Hub)。
  2. 在联系人列表中选择“Jeff Blankenburg”。
  3. 点击他的家庭地址(使我们进入地图应用程序)。
  4. 点击开始按钮。
  5. 开始游戏。

当点击返回键时,会沿着发生的事件列表后退。

重写返回键行为

是的,你没看错!你可以如你所想重定义返回键的行为。但这不表明允许你通过这种能力做一些不负责任的行为。在任何你想重写返回键行为的时候,你应该确认你所认为的“返回”的意思和你的用户所想的是一样。

例如,你打开了一个弹出框,用户的肌肉记忆可能会使他们按下返回键来关闭弹出框。在这种情况下,他们的本意不是离开应用程序,“返回”仅仅意味着摆脱弹出的对话框。

另一个例子,如果你有个游戏依赖于计时器或实时动作,使用返回键来暂停游戏就比较合适而非让人立即离开。下面是一些此类事件的指导原则:

  1. 你应该设身处地为用户考虑那一时刻“返回”对他们意味着什么。
  2. 如果再次用户按下返回键,你应该让默认行为执行。
  3. 使用返回键暂停游戏是个非常好的想法,但再按一次意味着他们真的想返回到前面,那就得让他们能后退。

这是在Windows Phone中重写返回键的代码:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
//你自己的代码。认真负责些。
e.Cancel = true;  //取消默认行为。
}

明天我们讨论设备的方向以及如何在程序中处理横纵方向问题。

原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-3-The-Back-Button-Paradigm.aspx

 发布人:wp7
文章来源:http://blog.csdn.net/porscheyin/archive/2010/11/02/5980899.aspx
本文地址:http://www.iwp7.com/archives/6251
尊重版权 © 转载时请以链接形式注明作者和原始出处!

--------------------------------------------------------------------------------------------------------------------------

参考代码

namespace WindowsPhoneApplication1
{
    public partial class Page1 : PhoneApplicationPage
    {
        public static int retureKey = 0;//局部变量、表示用户单击回退按钮的状态
        public Page1()
        {
            retureKey = 0;
            InitializeComponent();
        }
        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            if (retureKey == 1)//当用户第二次单击回退按钮时,表失用户真的想回去了
            {
                e.Cancel = false;
            }
            else
            {
                //当第一次单击后退按钮时,触发的事件,此时表示不愿意执行默认的回退按钮命令
                MessageBox.Show("MM,i love you ");
                e.Cancel = true;
            }
            retureKey += 1;//表示单击过一次回退按钮
        }
    }
}