public UserControl_MovableElement AddMovableElement(FrameworkElement element)
        {
            var movableElement = new UserControl_MovableElement(element);
            movableElement.ElementSelected += MovableElement_ElementSelected;
            m_canvas.Children.Add(movableElement);

            Canvas.SetTop(movableElement, 0);
            Canvas.SetLeft(movableElement, 0);

            m_elements.Add(movableElement);

            return movableElement;
        }
            private static void MoveElement(UserControl_MovableElement movableElement, Vector offset)
            {
                double new_x = Canvas.GetLeft(movableElement);
                double new_y = Canvas.GetTop(movableElement);

                new_x += offset.X;
                new_y += offset.Y;

                Canvas.SetLeft(movableElement, new_x);
                Canvas.SetTop(movableElement, new_y);
            }
 private void MovableElement_ElementSelected(object sender, SelectionChangedEventArgs e)
 {
     var c = sender as UserControl_MovableElement;
     SelectedElement = (c != null && c.IsSelected) ? c : null;
 }
 private void RaiseElementSelectedEvent(UserControl_MovableElement oldElement, UserControl_MovableElement newElement)
 {
     var args =
         new SelectionChangedEventArgs
         (
             UserControl_CanvasWithMovableElements.ElementSelectedEvent,
             (oldElement != null)
             ? new Collection<UserControl_MovableElement>(new[] { oldElement })
             : new Collection<UserControl_MovableElement>(),
             new Collection<UserControl_MovableElement>(new[] { newElement })
         );
     RaiseEvent(args);
 }
        public void RemoveMovableElement(UserControl_MovableElement movableElement)
        {
            m_canvas.Children.Remove(movableElement);

            m_elements.Remove(movableElement);
        }