private void canvas_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (!_isDrawing)
            {
                return;
            }

            Point p = e.GetPosition(canvas);

            _drawingObject.EndPoint = new Point2D(p.X, p.Y);
            if (_suitableDrawing != null)
            {
                canvas.Children.RemoveAt(canvas.Children.Count - 1);
                _suitableDrawing.Draw(canvas, _drawingObject);
            }
        }
        private void canvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (cbxShapes.SelectedIndex == -1)
            {
                return;
            }

            Point          p   = e.GetPosition(canvas);
            DrawableObject obj = (DrawableObject)(cbxShapes.SelectedItem as DrawableObject).Clone();

            obj.StartPoint = new Point2D(p.X, p.Y);
            obj.EndPoint   = new Point2D(p.X, p.Y);
            _drawingObject = obj;

            _suitableDrawing = GetSuitableDrawing(obj);
            if (_suitableDrawing != null)
            {
                _suitableDrawing.Draw(canvas, obj);
                _isDrawing = true;
            }
        }