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

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

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 521 522 523 524 525 526 527 528 529 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

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

Изображение на рис. 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;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  &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;

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

1 ... 521 522 523 524 525 526 527 528 529 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Ксения
Ксения 25.01.2025 - 12:30
Неплохая подборка книг. Прочитаю все однозначно.
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее