WPF
[Drag and Drop Objects] 개체 드래그 하기
스티커
2010. 6. 23. 15:15
xaml
<UserControl x:Class="DragAndDropSimple.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Canvas x:Name="rootCanvas" Width="640" Height="480" Background="Gray" > <!-- You can drag this rectangle around the canvas. --> <Rectangle MouseLeftButtonDown="Handle_MouseDown" MouseMove="Handle_MouseMove" MouseLeftButtonUp="Handle_MouseUp" Canvas.Left="30" Canvas.Top="30" Fill="Red" Width="50" Height="50" /> </Canvas> </UserControl>
코드
// Global variables used to keep track of the // mouse position and whether the object is captured // by the mouse. bool isMouseCaptured; double mouseVerticalPosition; double mouseHorizontalPosition; public void Handle_MouseDown (object sender, MouseEventArgs args) { Rectangle item = sender as Rectangle; mouseVerticalPosition = args.GetPosition(null).Y; mouseHorizontalPosition = args.GetPosition(null).X; isMouseCaptured = true; item.CaptureMouse(); } public void Handle_MouseMove(object sender, MouseEventArgs args) { Rectangle item = sender as Rectangle; if (isMouseCaptured) { // Calculate the current position of the object. double deltaV = args.GetPosition(null).Y - mouseVerticalPosition; double deltaH = args.GetPosition(null).X - mouseHorizontalPosition; double newTop = deltaV + (double)item.GetValue(Canvas.TopProperty); double newLeft = deltaH + (double)item.GetValue(Canvas.LeftProperty); // Set new position of object. item.SetValue(Canvas.TopProperty, newTop); item.SetValue(Canvas.LeftProperty, newLeft); // Update position global variables. mouseVerticalPosition = args.GetPosition(null).Y; mouseHorizontalPosition = args.GetPosition(null).X; } } public void Handle_MouseUp(object sender, MouseEventArgs args) { Rectangle item = sender as Rectangle; isMouseCaptured = false; item.ReleaseMouseCapture(); mouseVerticalPosition = -1; mouseHorizontalPosition = -1; }