2016-11-08 133 views
0

我正在尝试创建允许在画布内移动项目的应用程序。在UWP中移动项目

这里是XAML:

<Canvas Background="#4CAF50"> 
    <Grid Background="#3F51B5" 
     Width="50" 
     Height="50" 
     CanDrag="True" 
     ManipulationMode="All" 
     ManipulationDelta="UIElement_OnManipulationDelta"> 
    </Grid> 
</Canvas> 

C#:

private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    var myEllipse = (Grid)sender; 

    Canvas.SetLeft(myEllipse, Canvas.GetLeft(myEllipse) + e.Delta.Translation.X); 
    Canvas.SetTop(myEllipse, Canvas.GetTop(myEllipse) + e.Delta.Translation.Y); 
} 

Everyting工作正常,当我慢慢移动网格。当我将它移动得太快时,鼠标光标将移出网格并停止移动。有没有办法让光标停留在网格中间或任何能够帮助我更快地完成操作的方法?

+1

是否有一个需求意味着它需要在Canvas内完成?我工作的项目中有一个控件/组件叫做Winux,它叫做DraggableContentControl,它可能会让你感兴趣(https://github.com/jamesmcroft/WinUX-UWP-Toolkit/blob/develop/WinUX/WinUX.UWP.Xaml。 Controls/DraggableContentControl/DraggableContentControl.cs) 它使用CompositeTransform来执行翻译操作,这可能是您可以查看的替代方法 –

回答

0

当我移动它太快时,鼠标光标用尽了网格并且移动停止了。

这是因为您已启用GridCanDrag属性,该属性确定元素是否可以拖动在一拖和拖放操作的数据。你在这里设计了一个转换 - 拖动操作,它们是两个不同的操作系统,它们在这里发生冲突。

因此,一个非常简单的方法来解决您的问题是删除GridCanDrag="True"。此外,我在这里建议您也处理ManipulationStartedManipulationCompleted事件Grid以防其他可能发生的问题。

最后如果您对拖放操作感兴趣,可以参考官方Drag and drop sample