Объект Line представлен своими начальной и конечной точками с использованием свойств X1, Х2, Y1 и Y2 (учитывая, что высота и ширина при описании линии имеют мало смысла). Здесь устанавливается несколько дополнительных свойств, которые управляют тем, как визуализируются начальная и конечная точки объекта Line, а также настраивают параметры штриха. На рис. 26.1 показана визуализированная панель инструментов в визуальном конструкторе WPF среды Visual Studio.

С помощью окна Properties (Свойства) среды Visual Studio создайте обработчик события MouseLeftButtonDown для Canvas и обработчик события Click для каждого элемента RadioButton. Цель заключается в том, чтобы в коде C# визуализировать выбранную фигуру (круг, квадрат или линию), когда пользователь щелкает внутри Canvas. Первым делом определите следующее вложенное перечисление (и соответствующую переменную-член) внутри класса, производного от Window:

public partial class MainWindow : Window

{

  private enum SelectedShape

  { Circle, Rectangle, Line }

  private SelectedShape _currentShape;

}

В каждом обработчике Click установите переменную-член currentShape в корректное значение SelectedShape:

private void CircleOption_Click(object sender, RoutedEventArgs e)

{

  _currentShape = SelectedShape.Circle;

}

private void RectOption_Click(object sender, RoutedEventArgs e)

{

  _currentShape = SelectedShape.Rectangle;

}

private void LineOption_Click(object sender, RoutedEventArgs e)

{

  _currentShape = SelectedShape.Line;

}

Посредством обработчика события MouseLeftButtonDown элемента Canvas будет визуализироваться подходящая фигура (предопределенного размера) в начальной точке, которая соответствует позиции (х, у) курсора мыши. Ниже приведена полная реализация с последующим анализом:

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;

  }

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

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

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

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

  canvasDrawingArea.Children.Add(shapeToRender);

}

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

Перейти на страницу:

Похожие книги