Exemplo n.º 1
0
        private void DrawingSurface_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var position = e.GetPosition(DrawingSurface);

            if (AddRadioButton.IsChecked == true)
            {
                // Создать, нарисовать и добавить новый квадрат
                var visual = new DrawingVisual();
                DrawSquare(visual, position, false);
                DrawingSurface.AddVisual(visual);
            }
            else if (DeleteRadioButton.IsChecked == true)
            {
                var visual = DrawingSurface.GetVisual(position);
                if (visual != null)
                {
                    DrawingSurface.DeleteVisual(visual);
                }
            }
            else if (SelectMoveRadioButton.IsChecked == true)
            {
                var visual = DrawingSurface.GetVisual(position);
                if (visual != null)
                {
                    /* Найти верхний левый угол квадрата. Это делается просмотром текущих границ
                     * и удаления половины границы (толщины пера). Альтернативное решение может
                     * предусматривать хранение верхней левой точки каждого визуального элемента
                     * в коллекции DrawingCanvas и предоставление этой точки при проверке попадания. */
                    var topLeftCorner = new Point(
                        visual.ContentBounds.TopLeft.X + _drawingPen.Thickness / 2,
                        visual.ContentBounds.TopLeft.Y + _drawingPen.Thickness / 2);
                    DrawSquare(visual, topLeftCorner, true);

                    _clickOffset = topLeftCorner - position;
                    _isDragging  = true;

                    if (_selectedVisual != null && !Equals(_selectedVisual, visual))
                    {
                        // Выбор изменился. Очистить предыдущий выбор.
                        ClearSelection();
                    }

                    _selectedVisual = visual;
                }
            }
            else if (SelectMultipleRadioButton.IsChecked == true)
            {
                _selectionSquare = new DrawingVisual();

                DrawingSurface.AddVisual(_selectionSquare);

                _selectionSquareTopLeft = position;
                _isMultiSelecting       = true;

                // Обеспечить получение события MouseLeftButtonUp, даже
                // если пользователь вышел за пределы Canvas. В противном
                // случае могут быть нарисованы два квадрата сразу.
                DrawingSurface.CaptureMouse();
            }
        }