vb.net - How to smoothly drag an image box in WPF? -
i'm working wpf 4 , vb.net 2010. project consists of full-screen windows 640x480 grid in center.
in project, want have various image boxes (which have item .png images in them), user can drag around , drop in various places on grid.
in essence, need able make possible item clicked , dragged around grid, image box still visible , same size user moves around. should never able leave grid. need able determine if object on object, when mouse button released, dragged object "dropped", , triggers particular block of code.
how do this?
something similar 'project', using c#
from http://pastie.org/1498237
// xaml <window x:class="myproject.window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" title="window1" height="500" width="500"> <grid> <canvas x:name="mycanv"> <image width="150" x:name="myimg" source="some_source.png"/> </canvas> </grid> </window> //c# private point mouseclick; private double canvasleft; private double canvastop; public window1() { initializecomponent(); foreach (object obj in mycanv.children) { try { image img = (image)obj; img.previewmousedown += new mousebuttoneventhandler(myimg_mousedown); img.previewmousemove += new mouseeventhandler(myimg_mousemove); img.previewmouseup += new mousebuttoneventhandler(myimg_mouseup); img.textinput += new textcompositioneventhandler(myimg_textinput); img.lostmousecapture += new mouseeventhandler(myimg_lostmousecapture); img.setvalue(canvas.leftproperty, 0.0); img.setvalue(canvas.topproperty, 0.0); } catch { //do } } } void myimg_lostmousecapture(object sender, mouseeventargs e) { ((image)sender).releasemousecapture(); } void myimg_textinput(object sender, textcompositioneventargs e) { ((image)sender).releasemousecapture(); } void myimg_mouseup(object sender, mousebuttoneventargs e) { ((image)sender).releasemousecapture(); } void myimg_mousemove(object sender, mouseeventargs e) { if (((image)sender).ismousecaptured) { point mousecurrent = e.getposition(null); double left = mousecurrent.x - canvasleft; double top = mousecurrent.y - canvastop; ((image)sender).setvalue(canvas.leftproperty, canvasleft + left); ((image)sender).setvalue(canvas.topproperty, canvastop + top); canvasleft = canvas.getleft(((image)sender)); canvastop = canvas.gettop(((image)sender)); } } void myimg_mousedown(object sender, mousebuttoneventargs e) { mouseclick = e.getposition(null); canvasleft = canvas.getleft(((image)sender)); canvastop = canvas.gettop(((image)sender)); ((image)sender).capturemouse(); }
Comments
Post a Comment