Windows phone 8 在UniversalApps(WP8)中完成操作
我正在尝试实现拖放功能。我的问题是操纵完成事件触发得太晚。当我用手指快速移动并释放触摸时,我的物体会再飞半秒左右。我想防止在释放手指时调用OnManipulationDeltaWindows phone 8 在UniversalApps(WP8)中完成操作,windows-phone-8,touch,Windows Phone 8,Touch,我正在尝试实现拖放功能。我的问题是操纵完成事件触发得太晚。当我用手指快速移动并释放触摸时,我的物体会再飞半秒左右。我想防止在释放手指时调用OnManipulationDelta private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Debug.WriteLine("Changed"); var
private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
Debug.WriteLine("Changed");
var element = e.OriginalSource as FrameworkElement;
if (element != null)
{
TranslateTransform transform = element.RenderTransform as TranslateTransform;
if (transform != null)
{
transform.X += e.Delta.Translation.X;
}
}
}
请尝试触摸屏幕 是一种低级别方法,开销小,非常精确: 例如:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Touch.FrameReported += Touch_FrameReported;
}
private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
var point = e.GetPrimaryTouchPoint(this.CanvasLayer);
if (TouchPanel.IsGestureAvailable)
{
GestureSample gesture = TouchPanel.ReadGesture();
if (GestureType.Hold == gesture.GestureType)
{
IsActiveTouch = true;
StartMoveWheel(point.Position);
HoldWheel(sender, e);
}
else
{
this.CanvasLayer.ReleaseMouseCapture();
IsActiveTouch = false;
}
}
if (IsActiveTouch)
{
//Test if touch control is CanavasLayer
if (point.TouchDevice.DirectlyOver == this.CanvasLayer)
{
switch (point.Action)
{
case TouchAction.Move:
if (point != null) MoveWheel(point.Position);
break;
case TouchAction.Up:
default:
ExecuteCompletedMoveWheel();
break;
}
}
else
{
ExecuteCompletedMoveWheel();
}
}
}
解决方案是关闭惯性;) 我已经将操纵模式从All更改为TranslateX(因为我只想在X轴上平移我的元素)