Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Перемещение кнопки мышью


Автор: Artefack 4.2.2010, 13:11
Всем привет! Препод задал написать для автомата по экзу аналогичную фишку вот этой visuwords.com только на SL и для Русского языка.
Так как новичек в SL то сразу же появились вопросы))
Как двигать мышью button, или, как лучший вариант, есть ли стандартная функция добавления текста в Rectangle или Ellipse (их я разобрался как двигать)?
для перемещения прямоугольника использую стандартные события mouseleftbuttondown mouseleftbuttonup mousemove. А вот кнопка почему то не реагирует на mousemove((
Как создать стрелки между объектами?
И последний для меня более непонятный вопрос как передвигать их все влево с помощью мыши(см. визувордс).

У кого какие идеи?)) 
Заранее спасибо за помощь, если сможете мне в этом вопросе помочь
Код

  double beginX,beginY,currX,currY;
        bool isMouseDown = false;

        private void onMouseDown(Object sender, MouseButtonEventArgs e)
        {
            Rectangle rec = sender as Rectangle;
            beginX = e.GetPosition(this).X;
            beginY = e.GetPosition(this).Y;
            isMouseDown = true;
            rec.CaptureMouse();
        }

        private void onMouseMove(Object sender, MouseButtonEventArgs e)
        {
            if (isMouseDown)
            {
                Rectangle rec = sender as Rectangle;
                currX = e.GetPosition(this).X;
                currY = e.GetPosition(this).Y;
                rec.SetValue(Canvas.LeftProperty, currX);
                rec.SetValue(Canvas.TopProperty, currY);
                //sender.SetValue(Canvas.TopProperty, Convert.ToDouble(Canvas.TopProperty) + currY - beginY);
                //beginY = currY;
                //beginX = currX;
            }
        }

        private void onMouseUp(Object sender, MouseButtonEventArgs e)
        {
            beginY = currY;
            beginX = currX;
            Rectangle rec = sender as Rectangle;
            isMouseDown = false;
            rec.ReleaseMouseCapture();

        }



это перемещает прямоугольник, а вот это мои скудные попытки переместить кнопку:
Код

private void onMouseDown(Object sender, MouseButtonEventArgs e)
        {
            Button but = sender as Button;
            beginX = Canvas.GetLeft(but);//e.GetPosition(this).X;
            beginY = Canvas.GetTop(but);// e.GetPosition(this).Y;
            isMouseDown = true;
            but.CaptureMouse();
        }

        private void onMouseMove(Object sender, MouseEventArgs e)
        {
            if (isMouseDown)
            {
                Button but = sender as Button;
                currX = e.GetPosition(this).X;
                currY = e.GetPosition(this).Y;
                Canvas.SetLeft(but, currX);// rec.SetValue(Canvas.LeftProperty, currX);
                Canvas.SetTop(but, currY);//rec.SetValue(Canvas.TopProperty, currY);
                //sender.SetValue(Canvas.TopProperty, Convert.ToDouble(Canvas.TopProperty) + currY - beginY);
                //beginY = currY;
                //beginX = currX;
            }
        }

        private void onMouseUp(Object sender, MouseButtonEventArgs e)
        {
            beginY = currY;
            beginX = currX;
            Button but = sender as Button;
            isMouseDown = false;
            but.ReleaseMouseCapture();

        }

Однако кнопка двигаться не хочет;( Опять же повторюсь, если есть какая-нить ф-ия для подписи прямоугольника- так даже лучше и проще)) 

Автор: Artefack 6.2.2010, 18:53
че неужто ни у кого идей нет?((

Автор: dazy 7.2.2010, 21:36
Проще сделать свой контрол из фигуры (пусть элипс) и текстблока,  а его уже двигать мышкой.

Кстати, двигать мышкой вообще можно без строчки кода.
В блендере применяем к нужному контролу MouseDragElementBehavior, и все, получаем возможность таскать объект мышкой.

С кнопкой проблемка, она при нажатии думает что ее пытаются кликнуть, и не дает себя перетаскивать. В общем, чем разбираться с кнопкой, проще сделать свой контрол, потом проще будет.

Автор: dazy 20.2.2010, 01:29
http://stackoverflow.com/questions/2294224/connector-lines-between-two-ellipse Если нет, то пригодится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)