Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

<Rectangle Fill="Red" Height="35" Width="35" RadiusY="10" RadiusX="10" />

</RadioButton>

<RadioButton Name="lineOption" GroupName="shapeSelection"

Click="LineOption_Click">

<Line Height="35" Width="35" StrokeThickness="10" Stroke="Blue"

X1="10" Y1="10" Y2="25" X2="25"

StrokeStartLineCap="Triangle" StrokeEndLineCap="Round" />

</RadioButton>

</ToolBar>

Как

видите, объявление объектов
Rectangle
,
Ellipse
и
Line
в разметке XAML довольно прямолинейно и требует лишь минимальных комментариев. Вспомните, что свойство
Fill
позволяет указать кисть для рисования внутренностей фигуры. Когда нужна кисть сплошного цвета, можно просто задать жестко закодированную строку известных значений, а соответствующий преобразователь типа сгенерирует корректный объект. Интересная характеристика типа
Rectangle
связана с тем, что в нем определены свойства
RadiusX
и
RadiusY
, позволяющие визуализировать скругленные углы.

Объект

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);

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки