Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > mousemove image wpf form


Автор: larinva 24.9.2010, 12:31
Всем привет!
Помогите как в wpf реализовать перетаскивание картинки по форме 

Автор: CYBERDREAM 24.9.2010, 12:50
Привет larinva, создай тему еще в WinForms) для кучности  smile 
а по поводу вопроса твоего, то http://vbcity.com/blogs/xtab/archive/2009/10/26/wpf-how-to-move-elements-at-runtime.aspx
правда на VB, но не думаю что станет проблемой

Автор: larinva 24.9.2010, 12:54
Привет CYBERDREAM  в запарке сначала написал а потом уж подумал  что не в тот раздел smile 
Цитата

создай тему еще в WinForms) для кучности


Добавлено через 3 минуты и 8 секунд
а вот с этип будут проблемы мнебы на C# если моно smile 
Цитата

правда на VB, но не думаю что станет проблемой 

Автор: CYBERDREAM 24.9.2010, 13:05
ну тогда это http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3bbe949b-ca8a-4a6e-a4fb-a8d267e58931

Автор: larinva 24.9.2010, 13:10
сп-бо CYBERDREAM буду разбираться smile 

Автор: larinva 24.9.2010, 13:35
CYBERDREAM подскажите как эту строку перевести в C#
Код

If LeftPos < (MainCanvas.ActualWidth - MoveableImage.Width) Then
                MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 10)

Автор: CYBERDREAM 24.9.2010, 13:39
Код

If (LeftPos < (MainCanvas.ActualWidth - MoveableImage.Width))
     MoveableImage.SetValue(Canvas.LeftProperty, LeftPos + 10)

по идее нечто вроде) 
в примере что я дал, изображение находится на канве а не на гриде как обычно, вот он и использует его тут)

Автор: larinva 24.9.2010, 13:50
Пробовал так ругается


Ошибка    3    Оператор "<" не может применяться к операндам типа "object" и "double"    D:\Project\Новая папка\WpfApplication15\WpfApplication15\MainWindow.xaml.cs    34    21    WpfApplication15

Автор: CYBERDREAM 24.9.2010, 13:53
приведи Object к Double, там вроде не депенденси проперти завязано.

Добавлено через 5 минут и 42 секунды
http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx скачай отсюда проект.

Автор: larinva 24.9.2010, 14:20
а проще что -то есть?

Автор: CYBERDREAM 24.9.2010, 14:24
WinForms? smile 
а вообще не в курсе, передо мной такая задаче не вставала никогда. Разве что в графическом редакторе далал перетаскивание объекта, но это тоже был винформ

Автор: larinva 24.9.2010, 14:27
как это реализуется на finForm я знаю мне нужно на wpf

Автор: CYBERDREAM 24.9.2010, 14:28
на WPF ты тоже уже знаешь, но хочется по проще. Погугли может найдешь что то

Автор: larinva 24.9.2010, 14:34
еслиб гугл дал ответ я бы сюда не писал ))))

Добавлено через 9 минут и 44 секунды
можеть еще кто-то откликнется?

Автор: larinva 24.9.2010, 15:38
сделал вот так 
Код

void img_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
              {
                var img = (Canvas)sender;
                Point point = new Point(e.GetPosition(MainCanvas).X, e.GetPosition(MainCanvas).Y);

                img.Margin = new Thickness(point.X, point.Y, 0, 0);
            }

       }


движение началось но не по всему канву и картинка дергается может кто подправит?

Автор: larinva 24.9.2010, 16:39
переделал вот так
 
Код

        void img_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)

            {
                var img = (Canvas)sender;

                Point point = e.GetPosition(this);
                MainCanvas.ToolTip = "Нажмите левую кнопку для перемещения";
                MainCanvas.Margin = new Thickness(point.X, point.Y, 0, 0);

            }

теперь при быстром перемещение мыши картинка теряется помогите

Автор: CYBERDREAM 25.9.2010, 11:32
так ты получается канву двигаешь а не сам контрол с изображением

Автор: larinva 26.9.2010, 19:13
сделал вот так  smile 
Код

#region Mouse Move
        void myimg_MouseUp(object sender, MouseButtonEventArgs e)
        {
            ((Image)sender).ReleaseMouseCapture();
        }

        void myimg_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (((Image)sender).IsMouseCaptured)
                {
                    Point mouseCurrent = e.GetPosition(this);
                    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();
        }


Автор: CYBERDREAM 26.9.2010, 19:16
маладец  smile 
но может все таки постить будем в одном разделе?

Автор: larinva 26.9.2010, 19:40
это да прошу прощ-я просто там человек ответил

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