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

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

<DockPanel LastChildFill="True">

  <ToolBar DockPanel.Dock="Top" Name="mainToolBar" Height="50">

  </ToolBar>

  <Canvas Background="LightBlue" Name="canvasDrawingArea"/>

</DockPanel>

picture

Заполните элемент

ToolBar
набором объектов
RadioButton
, каждый из которых содержит объект специфического класса, производного от
Shape
. Легко заметить, что каждому элементу
RadioButton
назначается то же самое групповое имя
GroupName
(чтобы обеспечить взаимное исключение) и также подходящее индивидуальное имя.

<ToolBar DockPanel.Dock="Top" Name="mainToolBar" Height="50">

  <RadioButton Name="circleOption" GroupName="shapeSelection"

               Click="CircleOption_Click">

    <Ellipse Fill="Green" Height="35" Width="35" />

  </RadioButton>

  <RadioButton Name="rectOption" GroupName="shapeSelection"

               Click="RectOption_Click">

    <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.

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

С помощью окна 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
будет визуализироваться подходящая фигура (предопределенного размера) в начальной точке, которая соответствует позиции (
х
,
у
) курсора мыши. Ниже приведена полная реализация с последующим анализом:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*