在WPF中拖放图像

我试图将图像从canvas上的一个点拖放到另一个点(应该相对简单),但无法弄明白。 我要移动的图像具有以下XAML:

 

代码如下:

 bool isDragging = false; Point initMousePos; private void cityImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { isDragging = true; initMousePos = e.GetPosition(theGrid); } private void cityImage_MouseMove(object sender, MouseEventArgs e) { if (isDragging) { Image image = sender as Image; Canvas.SetTop(image, initMousePos.X); Canvas.SetLeft(image, initMousePos.Y); image.Visibility = System.Windows.Visibility.Visible; } } 

private void cityImage_MouseLeftButtonUp(object sender,MouseButtonEventArgs e){isDragging = false; }

我做什么来完成你想要的就是使用

 System.Windows.Controls.Primitives.Thumb 

作为UserControl的Root并设置ControlTemplate以显示图像(在边框内,但它应该没有那么好),如下所示:

     ... see below ...     

此外,我将图像的源绑定到类的属性:

    

UserControl有一个名为TranslateTransform (比如translateTransform ),它的属性XY将在DragDelta事件处理程序中设置:

 private void MyRootDragDelta(object sender, DragDeltaEventArgs e) { translateTransform.X += e.HorizontalChange; translateTransform.Y += e.VerticalChange; } 

别忘了添加:

 public ImageSource ImageSource { get; set; } 

希望这可以帮助。 如果有任何不清楚的地方可以随意询问。

您希望将“canvas”的“左”和“顶”属性设置为初始位置以外的其他属性。 在MouseMove处理程序中,您必须获取相对于父级的位置。 也; 确保父元素是canvas而不是网格。 图像上有一个相当大的左边距和上边距,以及变量名称为“theGrid”的控件。