Windows phone 7 Windows phone-如何双击退出?

Windows phone 7 Windows phone-如何双击退出?,windows-phone-7,windows-phone-8,Windows Phone 7,Windows Phone 8,我正在学习开发windows phone应用程序。我从一个基于浏览器的应用程序开始,遵循本教程-。我正在试验,我可以正确地使用后退按钮转到上一页和所有的东西,但我不能实现双击后退按钮退出 我见过很多浏览器应用程序在双击后退按钮后退出。例如,Flipkart- 后退按钮没有双选项卡事件。我们如何才能做到这一点 这种逻辑对你来说是可行的 生成一个全局变量 int Count=0 protected ovverride void OnBackKeyPress(CancelEvent

我正在学习开发windows phone应用程序。我从一个基于浏览器的应用程序开始,遵循本教程-。我正在试验,我可以正确地使用后退按钮转到上一页和所有的东西,但我不能实现双击后退按钮退出

我见过很多浏览器应用程序在双击后退按钮后退出。例如,Flipkart-


后退按钮没有双选项卡事件。我们如何才能做到这一点

这种逻辑对你来说是可行的

生成一个全局变量

int Count=0





     protected ovverride void OnBackKeyPress(CancelEventArgs e)
            {

            if(Count==0)
             {
             e.Canel=true;
              Count++;
             }
            else if(Count==1)
             {
              Count=0;
              //code for exiting
              //may be App.Current.Terminate(); in wp8
             //or in wp7
             //if (NavigationService.CanGoBack)  
             //{
             //    while (NavigationService.RemoveBackEntry() != null)
             //   {
             //        NavigationService.RemoveBackEntry();
            //    }
             //}
             }
            }

希望这有助于在双击时关闭应用程序,您可以使用
Dispatchermer
任务检查两次单击是否在1秒之内,如果是,请关闭应用程序,否则启动
计时器并再次检查。其代码片段如下所示:

dispatchermer
对象设置为类字段,如

DispatcherTimer dt = new DispatcherTimer();
类的构造函数中
指定要检查双击
间隔
,并添加
事件处理程序
,以便在指定时间过后执行某些操作。您可以在
类的构造函数中执行

dt.Interval = TimeSpan.FromSeconds(1.0);
dt.Tick += delegate(object s, EventArgs e)
{
    dt.Stop();
};
这里我们要做的是指定1秒的
timespan
,以检查在该秒内是否发生双击。Tick事件用于计时器完成1秒后要执行的操作。我们只需停止
计时器

现在导航到“后退键事件处理程序”
,下面是我检查双击的代码:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
    if (!dt.IsEnabled)
        dt.Start();
    else
        new Microsoft.Xna.Framework.Game().Exit();
}
当第一次点击时,
定时器
未启动,它将进入if条件并启动定时器。如果第二次点击在1秒后发生,那么我们在构造函数中编写的
勾选事件将触发,并且根据写入的逻辑,
计时器将停止

现在假设在1秒内出现双点击。对于第一次轻触,它将像往常一样启动
计时器
,如果用户立即再次按下后退按钮,则在其处理程序中,它将检查
计时器
是否正在运行。由于
计时器
尚未完成其1秒间隔,否则条件将启动,应用程序将关闭

我使用了
XNA库
/强制关闭应用程序的快捷方式。使用
新的Microsoft.Xna.Framework.Game().Exit()
方法您应该在引用中添加一个
microsoft.xna.framework.game.dll

根据需要设置时间间隔

希望这有帮助。谢谢

编辑:

有时windows 8上没有安装XNA。这里有一个解决方案,以便您在项目中添加上述程序集引用

您必须下载大约23MB的更新

为了节省时间,这里有一个指向上述程序集参考的Dropbox链接:


您可以创建一个全局
long
,表示用户最后一次按下后退按钮的时间。 每次按下“后退”按钮时,您都可以让程序减去经过的刻度数。如果它通过了少量的滴答声,您可以使程序退出。如果没有,请再次设置最后一个tick变量

您可以使用
System.DateTime.Ticks
获取表示当前时间的当前刻度

简单代码示例:

long LastExitAttemptTick = DateTime.Ticks;

private void BackButtonPressHandler(...)
{
    long thisTick = DateTime.Ticks;

    if (LastExitAttemptTick - thisTick < [specified amount])
        throw new Exception("Exit Exception"); //You can use XNA, but this is a quick and dirty way of exiting
    else
        LastExitAttemptTick = DateTime.Ticks;
}
long lastexitattenttick=DateTime.Ticks;
私有void BackButtonPressHandler(…)
{
long thisTick=DateTime.Ticks;
如果(LastExitAttentick-thisTick<[指定金额])
抛出新异常(“退出异常”);//您可以使用XNA,但这是一种快速而肮脏的退出方式
其他的
LastExitAttentick=DateTime.Ticks;
}
您可以使用10000000个刻度(1秒)的值。表示每秒10000个滴答声,所以10000*1000=10000000


编辑:或者如您所说,您也可以使用
DateTime。现在
使用秒值。任何一种方式都有效。

是的,后退按钮没有双击事件。您必须编写自己的逻辑,在设备上双击两次返回键退出应用程序。这是一个可能对你有帮助的解决方案

创建一个全局变量并用零初始化

Int-TapCount=0

现在用您自己的逻辑覆盖OnBackKeyPress事件

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
           TapCount++;
         if(TapCount==2)
          {
            if( windows phone 8 )
               {
                 Application.Current.Terminate(); 
               }
              else
              {
                 if (NavigationService.CanGoBack)
                {
                  while (NavigationService.RemoveBackEntry() != null)
                  {
                     NavigationService.RemoveBackEntry();
                  }
               }
            }

          }
         else
           e.Canel=true;
            base.OnBackKeyPress(e);
        }

这很简单。我已经这样实现了它:

首先声明全局变量:

int count;
现在在OnNavigatedTo(NavigationEventArgs e)方法中初始化其值:

count = 0;
现在,最后将以下代码添加到您的cs文件中:

backkeypress上受保护的覆盖无效(System.ComponentModel.CancelEventArgs e)
{
计数++;
e、 取消=真;
如果(计数=2)
{e.Cancel=false;base.OnBackKeyPress(e);}

}

e.Cancel=true;应仅适用于if(Count==0)-部分。if(windows phone 8)
的含义是什么?这意味着如果您的应用程序在wp8环境中运行很酷。。但我不希望不必要地增加该库。我用了一种和安德鲁相似的方法。请看我的评论。但是非常感谢你的时间。我在你说之前就做了,没有机会看这里。谢谢你抽出时间来帮助我。你很接近。记号值较大。最后我做了DateTime,现在计算毫秒的差值。如果小于500,我将其视为双击。请更新您的答案,我会标记它。