Язык программирования 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
рейтинг книги
Вы не прошли собеседование
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Метаморфозы Катрин
Фантастика:
фэнтези
8.26
рейтинг книги
Эволюция мага
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Попаданка для Дракона, или Жена любой ценой
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Сумеречный Стрелок 5
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Переиграть войну! Пенталогия
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Волков. Гимназия №6
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Картофельное счастье попаданки
Фантастика:
фэнтези
5.00