我正在学习开发Windows Phone应用程序。我按照本教程开始使用基于浏览器的应用程序 - http://blogs.msdn.com/b/jaimer/archive/2011/02/04/back-button-press-when-using-webbrowser-control-in-wp7.aspx。我正在尝试使用http://m.facebook.com我可以正确使用后退按钮转到上一页和所有内容,但我无法通过双击后退按钮实现退出。
我看过许多浏览器应用程序在双击后退按钮后退出。例如 - Flipkart - http://www.windowsphone.com/en-us/store/app/flipkart/84fc03ea-210d-4e3e-88e0-de502a2434c5
后退按钮没有双标签事件。我们怎样才能做到这一点?
答案 0 :(得分:1)
您可以创建一个全局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;
}
您可以使用10,000,000个刻度(1秒)的值。 MSDN表示每毫秒10,000个滴答,因此10,000 * 1000 = 10,000,000。
编辑:或者如您所说,您也可以使用DateTime.Now
并使用秒值。无论哪种方式都有效。
答案 1 :(得分:0)
这种逻辑可以为你效用
制作全局变量
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();
// }
//}
}
}
希望这有帮助
答案 2 :(得分:0)
要在双击上关闭应用程序,您可以使用DispatcherTimer
任务检查两次点击是否在一秒钟内,如果是,则关闭应用程序,否则启动timer
再次检查。该片段如下:
将DispatcherTimer
对象设为类字段,如
DispatcherTimer dt = new DispatcherTimer();
在class's constructor
中指定您要检查双击的interval
,并添加event handler
以在指定时间过后执行某些操作。您可以使用class's constructor
,
dt.Interval = TimeSpan.FromSeconds(1.0);
dt.Tick += delegate(object s, EventArgs e)
{
dt.Stop();
};
我们正在做的是我们指定1秒的timespan
以检查在该秒内是否发生双击。 Tick事件是我们在计时器完成1秒后想要做的事情。我们只是停止timer
。
现在导航到后退键事件处理程序,这是我检查双击的代码:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
if (!dt.IsEnabled)
dt.Start();
else
new Microsoft.Xna.Framework.Game().Exit();
}
当第一次点击时,timer
未启动,它将进入if条件并启动计时器。如果在1秒后发生第二次点击,那么我们在构造函数中写入的Tick
事件将触发,并根据其中写入的逻辑,timer
将停止。
现在假设双击因此在1秒内发生。对于第一次点击,它将启动timer
,如果用户立即再次按后退按钮,则在其处理程序中,它将检查timer
是否正在运行。由于timer
尚未完成1秒的间隔,否则条件将启动,应用程序将关闭。
我使用XNA library
/快捷方式强制关闭应用程序。要使用new Microsoft.Xna.Framework.Game().Exit();
方法,您应在参考中添加 microsoft.xna.framework.game.dll
。
根据需要设置 TimeSpan
区间。
希望这会有所帮助。感谢。
<强> EDIT:
强>
有时在Windows 8上没有安装XNA。这是一个解决方案,以便在项目中添加上面提到的程序集引用。
http://blogs.msdn.com/b/astebner/archive/2012/02/29/10274694.aspx
您必须下载大约23MB左右的更新。
为了节省时间,这是一个Dropbox链接到上面的程序集参考:
答案 3 :(得分:0)
是的,后退按钮没有双击事件。您必须编写自己的逻辑,以便在设备返回键两次点击双击时退出应用程序。以下是可能对您有帮助的解决方案。
创建一个全局变量并初始化为零
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);
}
答案 4 :(得分:0)
这非常简单。我已经像这样实现了它:
首先声明全局变量:
int count;
现在在 OnNavigatedTo(NavigationEventArgs e)方法中初始化其值:
count = 0;
现在最后将以下代码添加到您的cs文件中:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
count++;
e.Cancel = true;
if(count == 2)
{ e.Cancel = false; base.OnBackKeyPress(e); }
}