以前也做过类似的东西,无非是用两次点击的时间差来判断是双击还是单击。不过一直有个问题,就是双击的时候总会先判断第一次为单单击,虽然很快就过去了,但是毕竟也是个Bug。所以昨天在网上也看了些资料,重新整理编码了以下,测试结果比之前的好多了。
原理也是一样用时间差,不过这里是在第一次点击的时候设置一个定时器,如果在规定的时间内没有出现第二次点击才判断为单击事件,如果在规定的时间内出现了第二次点击则判断为双击事件,在等待的时间内不会错误的把双击事件的第一次点击误认为单击事件。
上代码:
public DateTime lastClickTime = DateTime.Now;
private DispatcherTimer Timer;
void button_Click(object sender, RoutedEventArgs e)
{
var nowTime = DateTime.Now;
var span = nowTime - lastClickTime;
lastClickTime = nowTime;
if (span.TotalMilliseconds > 300)
{
if (Timer != null)
{
Timer.Stop();
}
Timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 300) };
Timer.Tick += (s, e1) =>
{
Timer.Stop();
ClickText.Text = "单机事件";
};
Timer.Start();
}
else
{
ClickText.Text = "双击事件";
Timer.Stop();
}
}