none
Передвижение по Canvas RRS feed

  • Общие обсуждения

  • Есть Canvas и несколько UserControl На нём. UserControl добавляются динамически.

    Хочу их передвигать, чтобы можно было расположить их в том порядке как хочу. Друг под другом, пирамидой или в строчку или ещё как то. Размер UserControl маленький.

    Нашёл код передвижения - вешается на UserControl

            protected bool isDragging;
            Point clickPosition;
            Point currentPosition;

    private void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { isDragging = true; var draggableControl = sender as UserControl; //if (clickPosition.X == 0 && clickPosition.Y == 0) //{ clickPosition = e.GetPosition(this); //clickPosition = e.GetPosition(this.Parent as UIElement); //} draggableControl.CaptureMouse(); } private void Control_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { isDragging = false; var draggable = sender as UserControl; draggable.ReleaseMouseCapture(); //MessageBox.Show(currentPosition.X.ToString() + " / " + currentPosition.Y.ToString() + " / " + draggable.GetValue(Canvas.LeftProperty).ToString() + " / " + draggable.GetValue(Canvas.TopProperty).ToString()); //MessageBox.Show(currentPosition.X.ToString() + " / " + currentPosition.Y.ToString() + " / " + draggable.GetValue(Canvas.LeftProperty).ToString() + " / " + draggable.GetValue(Canvas.TopProperty).ToString()); //clickPosition = currentPosition; } private void Control_MouseMove(object sender, MouseEventArgs e) { var draggableControl = sender as UserControl; if (isDragging && draggableControl != null) { currentPosition = e.GetPosition(this.Parent as UIElement); var transform = draggableControl.RenderTransform as TranslateTransform; if (transform == null) { transform = new TranslateTransform(); draggableControl.RenderTransform = transform; } //Point s = new Point( // (double)draggableControl.GetValue(Canvas.LeftProperty), // (double)draggableControl.GetValue(Canvas.TopProperty)); draggableControl.SetCurrentValue(Canvas.LeftProperty, currentPosition.X); draggableControl.SetCurrentValue(Canvas.TopProperty, currentPosition.Y); //transform.X = currentPosition.X - clickPosition.X; //transform.Y = currentPosition.Y - clickPosition.Y; //transform.X = currentPosition.X - clickPosition.X; //transform.Y = currentPosition.Y - clickPosition.Y; transform.X = currentPosition.X; transform.Y = currentPosition.Y; } }

    Всё работает как надо только в одном случае когда я двигаю UserControl первый раз. Второй и последующий разы UserControl удаляется от курсора на величину (как я выяснил) от начального его расположения на Canvas. 

    Т.е. если первоначальные координаты его на Canvas были Left 100 Top 100, то если я его передвинул первый раз на координаты Left 1500 Top 1500 то при втором движении он будет отстоять от курсора мыши при движении на разницу 1500-100

    Пытался и записать координаты новые в переменную, и присвоить новые координаты первоначальным. Последнее что попытался сделать - это Присваивать новые привязки к UserControl -у на Canvas -е но всё равно липнет и всё к левому верхнему углу мышка. 

    Ничего не могу поделать.

    Спасибо за помощь

     


    Спасибо

    9 апреля 2015 г. 7:59