C# 鼠标双击并触摸散射视图项目
我开发了一个WPF4触摸应用程序,它使用了一些Microsoft Surface控件。我想在ScatterViewItem上观看鼠标双击事件。当我使用鼠标时,事件将激发,但当我使用手指时,事件将永远不会引发。为什么? 非常感谢 更新: 最后,我编写了这段代码,以在两个TouchLeave事件之间的所需时间内,在有限的rect 16px宽度和高度以及500ms上,重现一个带有TouchLeave事件的简单双击。这段代码没有经过优化,但很有效。如果您有什么意见,请不要犹豫:C# 鼠标双击并触摸散射视图项目,c#,wpf,touch,double-click,scatterview,C#,Wpf,Touch,Double Click,Scatterview,我开发了一个WPF4触摸应用程序,它使用了一些Microsoft Surface控件。我想在ScatterViewItem上观看鼠标双击事件。当我使用鼠标时,事件将激发,但当我使用手指时,事件将永远不会引发。为什么? 非常感谢 更新: 最后,我编写了这段代码,以在两个TouchLeave事件之间的所需时间内,在有限的rect 16px宽度和高度以及500ms上,重现一个带有TouchLeave事件的简单双击。这段代码没有经过优化,但很有效。如果您有什么意见,请不要犹豫: private bool
private bool _doubleHasTimeAndPos = false;
private TimeSpan? _doubleTouchTime = null;
private Point? _doubleTouchPoint = null;
private void ScatterViewItem_TouchLeave(object sender, TouchEventArgs e)
{
if (!this._doubleHasTimeAndPos)
{
this._doubleTouchTime = DateTime.Now.TimeOfDay;
this._doubleTouchPoint = e.GetTouchPoint(this.scatterView).Position;
this._doubleHasTimeAndPos = true;
}
else
{
if (DateTime.Now.TimeOfDay.Subtract(this._doubleTouchTime.Value).TotalMilliseconds <= 500)
{
Point touchPoint = e.GetTouchPoint(this.scatterView).Position;
double xDelta = Math.Abs(this._doubleTouchPoint.Value.X - touchPoint.X);
double yDelta = Math.Abs(this._doubleTouchPoint.Value.Y - touchPoint.Y);
if (xDelta <= 16 && yDelta <= 16)
{
// DOUBLE TAP here !
}
}
this._doubleTouchTime = null;
this._doubleTouchPoint = null;
this._doubleHasTimeAndPos = false;
}
}
只是一个猜测,因为缺乏测试此代码的触摸基础设施 WPF建议对任何UIElement使用Mouse.MouseDown attached事件,然后使用MouseButtonEventArgse.ClickCount检查双击的值2
<ScatterViewItem Mouse.MouseDown="MouseButtonEventHandler" ... />
让我知道这是否有效….在API级别,触摸事件不会生成双击事件
此外,微软的Surface UI设计指南免责声明:我帮助编写的指南实际上强烈反对双击的概念。触摸旨在为用户提供一种更“自然”的与技术交互方式,而无需任何培训、文档记录或记忆“隐藏”功能。双击不是人类在物理世界中的一种互动,也不是任何视觉启示。因此,不适合在软件应用程序中使用。顺便说一句,苹果同意这一理念——你不会在iPhone或iPad上看到任何双击互动。不起作用,事件从未发生过…:事实上,我认为在ScatterViewItem上没有任何鼠标事件与触摸一起工作。。。我试过这个:Mouse.AddMouseDownHandlermyScatterItem,newmousebuttoneventhandlertestmousedown;myScatterItem.MouseDown+=blablabla…我的错!这显然是一个与触摸相关的事件,不会像鼠标双击那样工作。假设双击的唯一方法是处理触地事件,并有一个附加的行为,该行为将使两次后续触地之间的差异保持在行为附加的相同元素上,例如半秒的差异…1您不应该这样做-请参阅下面我的答案。2你应该使用触地而不是触地离开。除了实际举起你的手指外,在其他几种情况下都会提出请假。3要比较触摸事件之间的坐标,需要使用相对于屏幕的坐标,而不是散点视图。散射视图甚至它所在的窗口本身都可能在事件之间移动。这是一个常见的难以诊断的错误来源感谢你的评论,但是触地/触地事件似乎从未在我的ScatterViewItem上提出过。。。我不知道为什么……我同意你的看法,双击并不是触摸屏的主要选择动作,但我已经说过iPhone\iPad确实支持双击进行缩放。因此,它可以作为用户操作的一个选项。
private void MouseButtonDownHandler(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
//// Its a double click... should work for touch.
}
}