Windows phone 7 Windows phone-如何双击退出?
我正在学习开发windows phone应用程序。我从一个基于浏览器的应用程序开始,遵循本教程-。我正在试验,我可以正确地使用后退按钮转到上一页和所有的东西,但我不能实现双击后退按钮退出 我见过很多浏览器应用程序在双击后退按钮后退出。例如,Flipkart-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
后退按钮没有双选项卡事件。我们如何才能做到这一点 这种逻辑对你来说是可行的 生成一个全局变量
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,我将其视为双击。请更新您的答案,我会标记它。