SurfaceDragDrop似乎永远不会结束,对象似乎陷入永恒(非)操纵

时间:2012-09-27 10:17:48

标签: wpf xaml pixelsense

我正在为Surface开发一个WPF应用程序,并遇到了一个我和我的同事都不知道答案的错误。

我遇到一种情况,即用户可以从框中拖动东西。该框只是一个图像,当触摸它时,产生另一个图像,并且是获得交互的对象,即被拖放。使用SurfaceDragDrop.BeginDragDrop(...)执行整个拖动。在掉落时,物体就会消失。

现在的问题是,偶尔(似乎是当输入快速进入,只是锤击屏幕而不是实际拖动对象时)产生的项目永远不会消失,即即使输入已被删除,它仍然保留在屏幕上。可以通过触摸它继续拖动来与它发生冲突,但是它的移动和旋转是关闭的,因为它似乎认为已经有另一个手指与它相互作用。

然而,通过调试我已经证明没有注册到对象的触摸。它的AreAnyTouchesCaptured属性为false。然而,操纵是活跃的。所以似乎发生的事情是,它会进入某种永无止境的操纵。 为了摆脱这种情况,我实施了一个临时解决方案,只需SurfaceDragDrop.CancelDragDrop(..)对屏幕上某段时间没有任何触摸的对象进行private void item_PreviewTouchDown(object sender, TouchEventArgs e) { var box = sender as Canvas; var imgpath = String.Format(@"[someimgpath].png"); var bmp = new BitmapImage(new Uri(imgpath, UriKind.RelativeOrAbsolute)); Image draggedItem = new Image { Source = bmp, Stretch = Stretch.None, Width = bmp.Width, Height = bmp.Height }; draggedItem.UpdateLayout(); var touchPoint = e.TouchDevice.GetTouchPoint(box); var itemX = touchPoint.Position.X - draggedItem.Width / 2.0; var itemY = touchPoint.Position.Y - draggedItem.Height / 2.0; box.Children.Add(draggedItem); draggedItem.SetValue(Canvas.LeftProperty, itemX); draggedItem.SetValue(Canvas.TopProperty, itemY); draggedItem.Visibility = System.Windows.Visibility.Hidden; //We should perfom drag-and-drop when the size of the draggedItem is updated, since //BeginDragDrop uses ActualWidth and ActualHeight property draggedItem.SizeChanged += (o, ev) => { List<InputDevice> devices = new List<InputDevice>(); devices.Add(e.TouchDevice); foreach (TouchDevice touch in box.TouchesCapturedWithin) { if (touch != e.TouchDevice) { devices.Add(touch); } } var img = new Image { Source = draggedItem.Source, Stretch = Stretch.None, Width = bmp.Width, Height = bmp.Height }; img.SetValue(Canvas.LeftProperty, itemX); img.SetValue(Canvas.TopProperty, itemY); var cursor = SurfaceDragDrop.BeginDragDrop(box, draggedItem, img, draggedItem, devices, DragDropEffects.Move); }; e.Handled = true; }

我希望我对这个问题的描述有点清楚,如果没有请问。下面是用于生成对象的代码。然而,我没有写它(前同事),我只是坚持调试:

{{1}}

0 个答案:

没有答案