0
我正在使用自定義TouchDevice(以下代碼)與UIElements進行交互。這個TouchDevice導致TouchEnter和TouchLeave事件在UIElements上觸發到屏幕座標的右下角,我傳遞給Move(x,y)
而不是在這些座標上的UIElement。我該如何解決?自定義TouchDevice觸發不正確位置的觸摸事件
在我的Surface Pro 3平板電腦(觸摸屏,Windows 8.1)上出現此問題,但不在我的桌面(無觸摸屏,Windows 7)上。
我第一次假定原因是GetTouchPoint(IInputElement relativeTo)
的錯誤實施。但是,只有在relativeTo設置爲null時調用此方法。
public class CustomTouchDevice : TouchDevice
{
public Point Position { get; set; }
private GazeTouchDevice(int id) : base(id)
{
SetActiveSource(PresentationSource.FromVisual(Application.Current.MainWindow));
}
public void Move(int x, int y)
{
if(!IsActive)
{
Activate();
ReportDown();
}
Position = new Point(x, y);
ReportMove();
}
public void Lost()
{
if(IsActive)
{
ReportUp();
Deactivate();
}
}
public override TouchPoint GetTouchPoint(IInputElement relativeTo)
{
Point point = Position;
if(relativeTo != null)
{
point = this.ActiveSource.RootVisual.TransformToDescendant((Visual)relativeTo).Transform(Position);
}
Rect rect = new Rect(point, new Size(1, 1));
return new TouchPoint(this, point, rect, TouchAction.Move);
}
public override TouchPointCollection GetIntermediateTouchPoints(IInputElement relativeTo)
{
return new TouchPointCollection();
}
}
在此先感謝!