Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 519 520 521 522 523 524 525 526 527 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

private void CanvasDrawingArea_MouseLeftButtonDown(object sender,

                                                   MouseButtonEventArgs e)

{

  Shape shapeToRender = null;

  // Сконфигурировать корректную фигуру для рисования.

  switch (_currentShape)

  {

    case SelectedShape.Circle:

      shapeToRender = new Ellipse() { Fill = Brushes.Green,

                                      Height = 35, Width = 35 };

      break;

    case SelectedShape.Rectangle:

      shapeToRender = new Rectangle()

        { Fill = Brushes.Red, Height = 35, Width = 35,

          RadiusX = 10, RadiusY = 10 };

      break;

    case SelectedShape.Line:

      shapeToRender = new Line()

      {

        Stroke = Brushes.Blue,

        StrokeThickness = 10,

        X1 = 0, X2 = 50, Y1 = 0, Y2 = 50,

        StrokeStartLineCap= PenLineCap.Triangle,

        StrokeEndLineCap = PenLineCap.Round

      };

      break;

    default:

      return;

  }

<b>  // Установить левый верхний угол для рисования на холсте.</b>

  Canvas.SetLeft(shapeToRender, e.GetPosition(canvasDrawingArea).X);

  Canvas.SetTop(shapeToRender, e.GetPosition(canvasDrawingArea).Y);

<b>  // Нарисовать фигуру.</b>

  canvasDrawingArea.Children.Add(shapeToRender);

}

На заметку! Возможно, вы заметили, что объекты Ellipse, Rectangle и Line, создаваемые в методе canvasDrawingArea_MouseLeftButtonDown(), имеют те же настройки свойств, что и соответствующие определения XAML. Вполне ожидаемо, код можно упростить, но это требует понимания объектных ресурсов WPF, которые будут рассматриваться в главе 27.

В коде проверяется переменная-член _currentShape с целью создания корректного объекта, производного от Shape. Затем устанавливаются координаты левого верхнего угла внутри Canvas с использованием входного объекта MouseButtonEventArgs. Наконец, в коллекцию объектов UIElement, поддерживаемую Canvas, добавляется новый производный от Shape объект. Если запустить программу прямо сейчас, то она должна позволить щелкать левой кнопкой мыши где угодно на холсте и визуализировать в позиции щелчка выбранную фигуру.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Удаление прямоугольников, эллипсов и линий с поверхности Canvas

Имея в распоряжении элемент Canvas с коллекцией объектов, может возникнуть вопрос: как динамически удалить элемент, скажем, в ответ на щелчок пользователя правой кнопкой мыши на фигуре? Это делается с помощью класса VisualTreeHelper из пространства имен System.Windows.Media. Роль "визуальных деревьев" и "логических деревьев" более подробно объясняется в главе 27, а пока организуйте обработку события MouseRightButtonDown объекта Canvas и реализуйте соответствующий обработчик:

private void CanvasDrawingArea_MouseRightButtonDown(object sender,

                                                    MouseButtonEventArgs e)

{

  // Сначала получить координаты x,y позиции,

  // где пользователь выполнил щелчок.

  Point pt = e.GetPosition((Canvas)sender);

  // Использовать метод HitTestO класса VisualTreeHelper, чтобы

  // выяснить, щелкнул ли пользователь на элементе внутри Canvas.

  HitTestResult result = VisualTreeHelper.HitTest(canvasDrawingArea, pt);

  // Если переменная result не равна null, то щелчок произведен на фигуре.

  if (result != null)

  {

      // Получить фигуру, на которой совершен щелчок, и удалить ее из Canvas.

      canvasDrawingArea.Children.Remove(result.VisualHit as Shape);

  }

}

Метод начинается с получения точных координат (х, у) позиции, где пользователь щелкнул внутри Canvas, и проверки попадания посредством статического метода VisualTreeHelper.HitTest(). Возвращаемое значение — объект HitTestResult — будет установлено в null, если пользователь выполнил щелчок не на UIElement внутри Canvas. Если значение HitTestResult не равно null, тогда с помощью свойства VisualHit можно получить объект UIElement, на котором был совершен щелчок, и привести его к типу, производному от Shape (вспомните, что Canvas может содержать любой UIElement, а не только фигуры). Детали, связанные с "визуальным деревом", будут изложены в главе 27.

1 ... 519 520 521 522 523 524 525 526 527 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Ксения
Ксения 25.01.2025 - 12:30
Неплохая подборка книг. Прочитаю все однозначно.
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее