WPF - 이미지 마우스 드래그 이동



마우스로 이미지 오브젝트를 드래그하는 예제이다. 마우스 드래깅은 PreviewMosue Down/Up/Move 이벤트를 이용해야 한다. 그냉 MouseDown 이벤트 등의 경우에는 Button과 같은데서 가로채지기 때문이다. 그리고 LostMouseCapture(드래그하여 창밖으로 이동한 경우)과 TextInput은 마우스버튼으 Up된 것과 같은 효과를 갖는다.


<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="/MyProject;component/Images/hawk_hyuk.gif" Canvas.Left="0" Canvas.Top="0" PreviewMouseDown="myimg_MouseDown" PreviewMouseMove="myimg_MouseMove" PreviewMouseUp="myimg_MouseUp" TextInput="myimg_TextInput" LostMouseCapture="myimg_LostMouseCapture" />
  </Canvas>
 </Grid>
</Window>

사용자 삽입 이미지


    public partial class Window1 : Window
    {

        private double canvasLeft;
        private double canvasTop;

        private double deltaLeft;
        private double deltaTop;

        public Window1()
        {
            InitializeComponent();
        }

        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 - deltaLeft);
                ((Image)sender).SetValue(Canvas.TopProperty, canvasTop + Top - deltaTop);
                canvasLeft = Canvas.GetLeft(((Image)sender));
                canvasTop = Canvas.GetTop(((Image)sender));
            }
        }                                                                      

        void myimg_MouseDown(object sender, MouseButtonEventArgs e)
        {
            canvasLeft = Canvas.GetLeft(((Image)sender));
            canvasTop = Canvas.GetTop(((Image)sender));

            Point pt = e.GetPosition((Image)sender);
            deltaLeft = pt.X;
            deltaTop = pt.Y;

            ((Image)sender).CaptureMouse();
        }
    }

Posted by 국가연금술사

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 초짜
    2011.02.10 00:01
    댓글 주소 수정/삭제 댓글
    강의 찾아 돌아다니다가 좋은데 건졌네요 -_-ㅋ 파일 참고할게요~!
  2. 안녕하세요
    2013.03.07 18:23
    댓글 주소 수정/삭제 댓글
    한 수 배우고 갑니다. ^^

    본문에 foreach 구문이 빠져있네요

    빠져도 컴파일 에러가 안나서, 왜 안되는지 계속 고민했어요 ㅎ

    안되시는 분들은 파일 받아서 확인해 보세요~


BLOG main image
일상의 신변잡기를 올리는 블로그입니다 by 국가연금술사

공지사항

카테고리

분류 전체보기 (204)
C# (7)
개발 (16)
IT (4)
일상 (49)
서평 (59)
게임 (12)
IT버그 (12)
카메라 (8)
PC하드웨어 (2)
IT후기 (25)
아이폰 (7)
맥북 (3)
Total : 602,354
Today : 1 Yesterday : 4