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

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

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

<b>     установленный в свойстве Data --&gt;</b>

&lt;Path Fill = &quot;Orange&quot; Stroke = &quot;Blue&quot; StrokeThickness = &quot;3&quot;&gt;

  &lt;Path.Data&gt;

    &lt;GeometryGroup&gt;

      &lt;EllipseGeometry Center = &quot;75,70&quot; RadiusX = &quot;30&quot; RadiusY = &quot;30&quot; /&gt;

    &lt;RectangleGeometry Rect = &quot;25,55 100 30&quot; /&gt;

    &lt;LineGeometry StartPoint=&quot;0,0&quot; EndPoint=&quot;70,30&quot; /&gt;

    &lt;LineGeometry StartPoint=&quot;70,30&quot; EndPoint=&quot;0,30&quot; /&gt;

  &lt;/GeometryGroup&gt;

  &lt;/Path.Data&gt;

&lt;/Path&gt;

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

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

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

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

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

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

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

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

&lt;Path Stroke=&quot;Black&quot; StrokeThickness=&quot;1&quot; &gt;

  &lt;Path.Data&gt;

    &lt;PathGeometry&gt;

      &lt;PathGeometry.Figures&gt;

        &lt;PathFigure StartPoint=&quot;10,50&quot;&gt;

          &lt;PathFigure.Segments&gt;

           &lt;BezierSegment

             Point1=&quot;100,0&quot;

             Point2=&quot;200,200&quot;

             Point3=&quot;300,100&quot;/&gt;

           &lt;LineSegment Point=&quot;400,100&quot; /&gt;

           &lt;ArcSegment

             Size=&quot;50,50&quot; RotationAngle=&quot;45&quot;

             IsLargeArc=&quot;True&quot; SweepDirection=&quot;Clockwise&quot;

             Point=&quot;200,100&quot;/&gt;

           &lt;/PathFigure.Segments&gt;

      &lt;/PathFigure&gt;

      &lt;/PathGeometry.Figures&gt;

    &lt;/PathGeometry&gt;

  &lt;/Path.Data&gt;

&lt;/Path&gt;

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

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

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

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

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

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

&lt;Path Stroke=&quot;Black&quot; StrokeThickness=&quot;3&quot;

    Data=&quot;M 10,75 C 70,15 250,270 300,175 H 240&quot; /&gt;

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

Команда

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

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