C#.codebox 5
WPF – How to drag an Image with the mouse?
The code below was used in ShortcutMan.G 3.0 to drag an image around the window (a TabItem in this case) with the mouse.
The image is contained within a Canvas which is contained within a TabItem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | Image myImage = null; //selected image Boolean MouseIsDown = false; //mouse down state //Left button down - when the mouse button is down in the image void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { myImage = (Image)sender; if (e.ClickCount == 1) //if one click { //Drag image TabItem Tab = (TabItem)TabControl1.SelectedItem; Canvas TabCanvas = (Canvas)Tab.Content; ////Get mouse coordinates and center the cursor in the image (optional) Point mouseCoordinates = new Point(e.GetPosition(TabCanvas).X, e.GetPosition(TabCanvas).Y); Canvas.SetLeft(myImage, mouseCoordinates.X - (myImage.Width / 2)); Canvas.SetTop(myImage, mouseCoordinates.Y - (myImage.Height / 2)); //Update mouse state MouseIsDown = true; } } //Left button up - when the mouse button goes up void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { //Update mouse state MouseIsDown = false; } //Mouse leave - when the mouse button leaves the image void Image_MouseLeave(object sender, MouseEventArgs e) { //Update mouse state MouseIsDown = false; } //Mouse move - when the mouse moves void Image_MouseMove(object sender, MouseEventArgs e) { if (myImage != null && MouseIsDown) //if there's an image selected and if mouse is down { TabItem Tab = (TabItem)TabControl1.SelectedItem; Canvas TabCanvas = (Canvas)Tab.Content; //Get mouse coordinates Point mouseCoordinates = new Point(e.GetPosition(TabCanvas).X, e.GetPosition(TabCanvas).Y); //Set limits - the limits within the tab (optional) if (mouseCoordinates.X < 0) mouseCoordinates.X = 0; if (mouseCoordinates.Y < 0) mouseCoordinates.Y = 0; if (mouseCoordinates.X > TabCanvas.Width) mouseCoordinates.X = TabCanvas.Width; if (mouseCoordinates.Y > TabCanvas.Height) mouseCoordinates.Y = TabCanvas.Height; //Update image location Canvas.SetLeft(myImage, mouseCoordinates.X - (myImage.Width / 2)); Canvas.SetTop(myImage, mouseCoordinates.Y - (myImage.Height / 2)); } } |
