我正在尝试创建允许在画布内移动项目的应用程序。
这是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);
}
当我慢慢移动网格时,一切正常。当我移动得太快时,鼠标光标会跑出网格并停止移动。有没有办法将光标保持在网格中间或任何可以帮助我更快地完成它的事情?
答案 0 :(得分:0)
当我移动得太快时,鼠标光标会跑出网格并停止移动。
这是因为您已启用CanDrag
的{{1}}属性,此属性确定是否可以在拖放操作中将元素作为数据拖动。你在这里设计一个Translate-Dragging操作,它们是两个不同的操作系统,它们在这里发生冲突。
因此,解决问题的一种非常简单的方法是删除Grid
的{{1}}。此外,我在此建议您处理CanDrag="True"
Grid
事件ManipulationStarted
以防其他可能出现的问题。
最后,如果您对拖放操作感兴趣,可以参考官方Drag and drop sample。