Windows Phone7退出对话框的一点心得


 

 

首先问题是,何时调用?

 

根据我的经验,在按下Back键的时候程序会收到一个事件:

1.      如果是App类

在VS生成的代码中有一个InitializePhoneApplication函数,在里面创建了RootFrame对象,这个对象有一个事件BackKeyPress,添加一个函数响应它,按下Back键的时候这个函数会被响应,比如:

private void OnBackKeyPress(object sender,System.ComponentModel.CancelEventArgs e)

{

}

RootFrame.BackKeyPress += OnBackKeyPress;

2.      如果是根页面

在MainPage中就是OnBackKeyPress虚函数,你可以override它,按下Back键的时候这个函数会被响应。函数如下:

  protected override voidOnBackKeyPress(System.ComponentModel.CancelEventArgse)

  {

  }

 

这两个函数都有一个CancelEventArgs对象,这个对象是很重要的,它决定了当前的Back操作是否有效。

接下来就是判断程序是否当前按下Back键的时候程序将要退出了,这个时候我们应该检查一下BackStack,看看是否还有回退的可能

如果是App.xaml.cs,这样调用

If((RootVisual as RootFrame).CanGoBack ==false)

{

}

如果是MainPage.xaml.cs,这样调用

if (NavigationService.CanGoBack == false)

{

}

 

接下来的问题就是如何弹出对话框,这里面又有两种方式,其中Silverlight的方式比较简单,但是效果差一点,XNA的方式稍微有些繁琐,但是效果比较好。

 

首先谈谈Silverlight的方式

这种方式下我们一般调用MessageBox.Show来显示对话框,关于这个函数我就不多讲了,很简单的用法,只是用这个方式弹出的对话框没有声音,也没有震动的效果,所以我主要谈谈XNA对话框的实现。

 

XNA方式下,调用的是Guide.BeginShowMessageBox函数,这个函数在弹出的时候,会播放一个提示音,并且震动一下手机,但是不幸的是,它是一个异步函数,换而言之,如果你在OnBackKeyPress中调用了这个函数,对话框会显示出来,但是程序会继续执行,然后就退出了,为了解决这个问题,我写了这样一个类,QuitMessageBox,代码如下:

 

using System.Windows;

usingMicrosoft.Xna.Framework.GamerServices;

namespace WindowsPhoneApplication1

{

   public class QuitMessageBox

    {

       private static int _shouldExit = -1;

       public static MessageBoxResult Show(string title, string content)

       {

           Guide.BeginShowMessageBox(title, content, new string[] { "确定","取消" }, 0, MessageBoxIcon.Alert, asyncResult =>

           {

                int? returned =Guide.EndShowMessageBox(asyncResult);

                if (returned == 0)

                {

 

                    _shouldExit = 1;

                }

                else

                {

                    _shouldExit = 0;

 

                }

 

           }, null);

 

           while (true)

           {

                if (_shouldExit == 1)

                {

                    return MessageBoxResult.OK;

                    break;

                }

                else if (_shouldExit == 0)

                {                  

                    _shouldExit = -1;

                    return MessageBoxResult.Cancel;

                    break;

                }

               System.Threading.Thread.Sleep(1);

 

 

           }

       }

    }

}

调用形式为QuitMessageBox.Show(string title,string content);

该函数返回两个值,如果是MessageBoxResult.OK,表示点了确定,如果是MessageBoxResult.Cancel就表示点了取消

 

这时候我们就可以放在OnBackKeyPress里了,可以这样写:

protected override voidOnBackKeyPress(System.ComponentModel.CancelEventArgs e)

       {

          

           if (NavigationService.CanGoBack == false)

           {

                if (QuitMessageBox.Show("提示","确定退出吗?") == MessageBoxResult.Cancel)

                    e.Cancel = true;   

           }

 

       }

这样就大功告成了。

阅读更多
个人分类: Windows Phone7开发
想对作者说点什么? 我来说一句

Windows Phone7 PDF

2011年06月07日 11.75MB 下载

Windows phone7手写识别程序

2011年09月27日 622KB 下载

ARM的一点心得 ARM的一点心得

2011年04月09日 120KB 下载

Windows Phone7开发系列课程.pdf

2011年08月14日 2.7MB 下载

优酷Windows Phone7客户端

2013年04月01日 8.3MB 下载

silver light for windows phone7

2012年07月31日 4.06MB 下载

windows phone7 音乐播放器实例

2012年12月27日 650KB 下载

没有更多推荐了,返回首页

不良信息举报

Windows Phone7退出对话框的一点心得

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭