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

на главную

Жанры

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

На заметку! Класс

Path
не является единственным классом в инфраструктуре WPF, который способен работать с коллекцией геометрических объектов. Например, классы
DoubleAnimationUsingPath
,
DrawingGroup
,
GeometryDrawing
и даже
UIElement
могут использовать геометрические объекты для визуализации с применением свойств
PathGeometry
,
ClipGeometry
,
Geometry
и
Clip
соответственно.

В показанной далее разметке для элемента

Path
используется несколько типов, производных от
Geometry
. Обратите внимание, что свойство
Data
объекта
Path
устанавливается в объект
GeometryGroup
, который содержит объекты других производных от
Geometry
классов, таких как
EllipseGeometry
,
RectangleGeometry
и
LineGeometry
. Результат представлен на рис.26.3.

<!-- Элемент Path содержит набор объектов Geometry,

установленный в свойстве Data -->

<Path Fill = "Orange" Stroke = "Blue" StrokeThickness = "3">

<Path.Data>

<GeometryGroup>

<EllipseGeometry Center = "75,70" RadiusX = "30" RadiusY = "30" />

<RectangleGeometry Rect = "25,55 100 30" />

<LineGeometry StartPoint="0,0" EndPoint="70,30" />

<LineGeometry StartPoint="70,30" EndPoint="0,30" />

</GeometryGroup>

</Path.Data>

</Path>

Изображение на рис. 26.3 может быть визуализировано с применением показанных ранее классов

Line
,
Ellipse
и
Rectangle
. Однако это потребовало бы помещения различных объектов
UIElement
в память. Когда для моделирования точек рисуемого изображения используются геометрические объекты, а затем коллекция геометрических объектов помещается в контейнер, который способен визуализировать данные (
Path
в рассматриваемом случае), то тем самым сокращается расход памяти.

Теперь вспомните, что класс

Path
имеет ту же цепочку наследования, что и любой член пространства имен
System.Windows.Shapes
, а потому обладает возможностью отправлять такие же уведомления о событиях, как другие объекты
UIElement
. Следовательно, если определить тот же самый элемент
<Path>
в проекте Visual Studio, тогда выяснить, что пользователь щелкнул в любом месте линии, можно будет за счет обработки события мыши (не забывайте, что редактор Kaxaml не разрешает обрабатывать события для написанной разметки).

"Мини-язык" моделирования путей

Из всех классов, перечисленных в табл. 26.3, класс

PathGeometry
наиболее сложен для конфигурирования в терминах XAML и кода. Причина объясняется тем фактом, что каждый сегмент
PathGeometry
состоит из объектов, содержащих разнообразные сегменты и фигуры (скажем,
ArcSegment
,
BezierSegment
,
LineSegment
,
PolyBezierSegment
,
PolyLineSegment
,
PolyQuadraticBezierSegment
и т.д.). Вот пример объекта
Path
, свойство
Data
которого было установлено в элемент
PathGeometry
, состоящий из различных фигур и сегментов:

<Path Stroke="Black" StrokeThickness="1" >

<Path.Data>

<PathGeometry>

<PathGeometry.Figures>

<PathFigure StartPoint="10,50">

<PathFigure.Segments>

<BezierSegment

Point1="100,0"

Point2="200,200"

Point3="300,100"/>

<LineSegment Point="400,100" />

<ArcSegment

Size="50,50" RotationAngle="45"

IsLargeArc="True" SweepDirection="Clockwise"

Point="200,100"/>

</PathFigure.Segments>

</PathFigure>

</PathGeometry.Figures>

</PathGeometry>

</Path.Data>

</Path>

По правде говоря, лишь немногим программистам придется когда-либо вручную строить сложные двумерные изображения, напрямую описывая объекты производных от

Geometry
или
PathSegment
классов. Позже в главе вы узнаете, как преобразовывать векторную графику в операторы "мини-языка" моделирования путей, которые можно применять в разметке XAML.

Даже с учетом содействия со стороны упомянутых ранее инструментов объем разметки XAML, требуемой для определения сложных объектов

Path
, может быть устрашающе большим, т.к. данные состоят из полных описаний различных объектов классов, производных от
Geometry
или
PathSegment
. Для того чтобы создавать более лаконичную разметку, в классе
Path
поддерживается специализированный "мини-язык".

Например, вместо установки свойства

Data
объекта
Path
в коллекцию объектов классов, производных от
Geometry
и
PathSegment
, его можно установить в одиночный строковый литерал, содержащий набор известных символов и различных значений, которые определяют фигуру, подлежащую визуализации. Ниже приведен простой пример, а его результирующий вывод показан на рис. 26.4:

<Path Stroke="Black" StrokeThickness="3"

Data="M 10,75 C 70,15 250,270 300,175 H 240" />

Команда

М
(от move — переместить) принимает координаты (
х
,
у
) позиции, которая представляет начальную точку рисования. Команда
С
(от curve — кривая) принимает последовательность точек для визуализации кривой (точнее кубической кривой Безье), а команда
Н
(от horizontal — горизонталь) рисует горизонтальную линию.

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

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6