110,552
社区成员
发帖
与我相关
我的任务
分享
bool isBeginMove = false;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (isBeginMove)
{
Point position = e.GetPosition(this);
double pX = position.X;
double pY = position.Y;
myImage.SetValue(Canvas.LeftProperty, pX - myImage.Width / 2);
myImage.SetValue(Canvas.TopProperty, pY - myImage.Height / 2);
}
}
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ButtonState == e.LeftButton)
{
isBeginMove = true;
}
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
isBeginMove = false;
}
public partial class Window1 : Window
{
private bool _isDragging = false;
private Point _startPoint;
private Point _relativePoint;
private Image _selectImage;
public Window1()
{
InitializeComponent();
}
private void Image_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_selectImage = sender as Image;
_startPoint = e.GetPosition(ImageCanvas);
_relativePoint = e.GetPosition(_selectImage);
_isDragging = true;
foreach (Image image in ImageCanvas.Children)
{
image.SetValue(Canvas.ZIndexProperty, 0);
}
_selectImage.SetValue(Canvas.ZIndexProperty, 1);
}
private void ImageCanvas_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
_isDragging = false;
}
private void ImageCanvas_DragOver(object sender, DragEventArgs e)
{
if (e.Data != null && e.Data.GetDataPresent(typeof(Image)))
{
Image image = e.Data.GetData(typeof(Image)) as Image;
Point p = e.GetPosition(ImageCanvas);
image.SetValue(Canvas.LeftProperty, p.X - _relativePoint.X);
image.SetValue(Canvas.TopProperty, p.Y - _relativePoint.Y);
}
}
private void ImageCanvas_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && _isDragging )
{
Point newPos = e.GetPosition(ImageCanvas);
if ((Math.Abs(newPos.X - _startPoint.X) > SystemParameters.MinimumHorizontalDragDistance) ||
(Math.Abs(newPos.Y - _startPoint.Y) > SystemParameters.MinimumVerticalDragDistance))
{
ImageCanvas.GiveFeedback += new GiveFeedbackEventHandler(ImageCanvas_GiveFeedback);
DragDrop.DoDragDrop(ImageCanvas, _selectImage, DragDropEffects.Move);
_isDragging = false;
ImageCanvas.GiveFeedback -= new GiveFeedbackEventHandler(ImageCanvas_GiveFeedback);
}
}
}
void ImageCanvas_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
Mouse.SetCursor(Cursors.Arrow); //Set Cursor
e.Handled = true;
}
}