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

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

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

На заметку! По умолчанию метод

VisualTreeHelper.HitTest()
возвращает объект
UIElement
самого верхнего уровня, на котором совершен щелчок, и не предоставляет информацию о других объектах, расположенных под ним (т.е. перекрытых в Z-порядке).

В результате внесенных модификаций должна появиться возможность добавления фигуры на

Canvas
щелчком левой кнопкой мыши и ее удаления щелчком правой кнопкой мыши.

До настоящего момента вы применяли объекты типов, производных от

Shape
, для визуализации содержимого элементов
RadioButton
с использованием разметки XAML и заполняли
Canvas
в коде С#. Во время исследования роли кистей и графических трансформаций в данный пример будет добавлена дополнительная функциональность. К слову, в другом примере главы будут иллюстрироваться приемы перетаскивания на объектах
UIElement
. А пока давайте рассмотрим оставшиеся члены пространства имен
System.Windows.Shapes
.

Работа с элементами Polyline и Polygon

В текущем примере используются только три класса, производных от

Shape
. Остальные дочерние классы (
Polyline
,
Polygon
и
Path
) чрезвычайно трудно корректно визуализировать без инструментальной поддержки (такой как инструмент Blend для Visual Studio или другие инструменты, которые могут создавать векторную графику) — просто потому, что они требуют определения большого количества точек для своего выходного представления. Ниже представлен краткий обзор остальных типов
Shapes
.

Тип

Polyline
позволяет определить коллекцию координат (
х
,
у
) (через свойство
Points
) для рисования последовательности линейных сегментов, не требующих замыкания. Тип
Polygon
похож, но запрограммирован так, что всегда замыкает контур, соединяя начальную точку с конечной, и заполняет внутреннюю область с помощью указанной кисти. Предположим, что в редакторе Kaxaml создан следующий элемент
StackPanel
:

<b>&lt;!-- Элемент Polyline не замыкает автоматически конечные точки --&gt;</b>

&lt;Polyline Stroke =&quot;Red&quot; StrokeThickness =&quot;20&quot; StrokeLineJoin =&quot;Round&quot;

          Points =&quot;10,10 40,40

10,90 300,50&quot;/&gt;

<b>&lt;!-- Элемент Polygon всегда замыкает конечные точки --&gt;</b>

&lt;Polygon Fill =&quot;AliceBlue&quot; StrokeThickness =&quot;5&quot; Stroke =&quot;Green&quot;

          Points =&quot;40,10 70,80 10,50&quot; /&gt;

На рис. 26.2 показан визуализированный вывод в Kaxaml.

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

Работа с элементом Path

Применяя только типы

Rectangle
,
Ellipse
,
Polygon
,
Polyline
и
Line
, нарисовать детализированное двумерное векторное изображение было бы исключительно трудно, т.к. упомянутые примитивы не позволяют легко фиксировать графические данные, подобные кривым, объединениям перекрывающихся данных и т.д. Последний производный от
Shape
класс,
Path
, предоставляет возможность определения сложных двумерных графических данных в виде коллекции независимых геометрических объектов. После того, как коллекция таких геометрических объектов определена, ее можно присвоить свойству
Data
класса
Path
, где она будет использоваться для визуализации сложного двумерного изображения.

Свойство

Data
получает объект класса, производного от
System.Windows.Media.Geometry
, который содержит ключевые члены, кратко описанные в табл. 26.2.

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

Классы, которые расширяют класс

Geometry
(табл. 26.3), выглядят очень похожими на свои аналоги, производные от
Shape
. Например, класс
EllipseGeometry
имеет члены, подобные членам класса
Ellipse
. Крупное отличие связано с тем, что производные от
Geometry
классы не знают, каким образом визуализировать себя напрямую, поскольку они не являются
UIElement
. Взамен классы, производные от
Geometry
, представляют всего лишь коллекцию данных о точках, которая указывает объекту
Path
, как их визуализировать.

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

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

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

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

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

<b>&lt;!-- Элемент Path содержит набор объектов Geometry,</b>

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