'drag'에 해당되는 글 1건

  1. 2009.01.05 Silverlight Drag Example

매우 간단한 드래그 예제입니다.
드래그 할 대상을 클릭할때 초기 Position 값을 설정하고, MouseMove 이벤트가 발생할 때마다 Position 값을 읽어 이전의 값과 차이만큼 Margin을 설정해주는 방법이에요.
참고. CaptureMouse() 메서드가 포인트가 되겠습니다.

        // 이전 마우스 위치
        double oldX;
        double oldY;

        // 현재 마우스 위치
        double newX;
        double newY;

        // 드래그 여부
        bool isDrag = false;

        void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            // Rec_Drag -> Rectangle 로 드래그 대상
            Rec_Drag.MouseLeftButtonDown +=
               new MouseButtonEventHandler(Rec_Drag_MouseLeftButtonDown);
            Rec_Drag.MouseLeftButtonUp +=
               new MouseButtonEventHandler(Rec_Drag_MouseLeftButtonUp);
            Rec_Drag.MouseMove +=
               new MouseEventHandler(Rec_Drag_MouseMove);
        }

        void Rec_Drag_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDrag && Rec_Drag.CaptureMouse())
            {
                newX = e.GetPosition(this).X;
                newY = e.GetPosition(this).Y;

                // 현재값과 이전값의 차이만큼 Margin 설정
                Rec_Drag.Margin =
                   new Thickness(Rec_Drag.Margin.Left + (newX - oldX),
                   Rec_Drag.Margin.Top + (newY - oldY), 0, 0);

                oldX = newX;
                oldY = newY;
            }
        }

        void Rec_Drag_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            isDrag = false;
        }

        void Rec_Drag_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            isDrag = true;

            oldX = e.GetPosition(this).X;
            oldY = e.GetPosition(this).Y;
        }



Posted by glycerine
,