Синтаксис разметки пути

Пути рассматриваются в разделах "Фигуры" и "Базовый рисунок" в обзоре WPF и обзоре геометрии, однако в этом разделе подробно описаны мощные и сложные мини-языки, которые можно использовать для указания геометрий пути более компактно с помощью языка разметки расширяемых приложений (XAML).

Необходимые компоненты

Чтобы понять эту тему, необходимо ознакомиться с основными функциями Geometry объектов. Более подробную информацию см. в разделе Общие сведения о классе Geometry.

Мини-языки StreamGeometry и PathFigureCollection

WPF предоставляет два класса, которые предоставляют мини-языки для описания геометрических путей: StreamGeometry и PathFigureCollection.

  • При настройке свойства типа используется StreamGeometry мини-язык, например Clip свойство элемента UIElement или Data свойствоPath.Geometry В следующем примере для создания StreamGeometryатрибута используется синтаксис атрибутов.

    <Path Stroke="Black" Fill="Gray"
          Data="M 10,100 C 10,300 300,-200 300,100" />
    
  • При настройке PathFigureCollection Figures свойства объекта PathGeometryиспользуется мини-язык. В следующем примере для создания PathFigureCollection атрибута используется синтаксис атрибута PathGeometry.

    <Path Stroke="Black" Fill="Gray">
      <Path.Data>
        <PathGeometry Figures="M 10,100 C 10,300 300,-200 300,100" />
      </Path.Data>
    </Path>
    

Как видно из предыдущих примеров мини-языки очень похожи. Всегда можно использовать в любой PathGeometry ситуации, когда можно использовать a StreamGeometry; так что следует использовать? StreamGeometry Используйте, если не нужно изменять путь после его создания; используйте, PathGeometry если необходимо изменить путь.

Дополнительные сведения о различиях между PathGeometry объектами StreamGeometry см. в обзоре геометрии.

Примечание о пробелах

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

Два числа не должны быть разделены запятыми или пробелами, но это можно сделать только в том случае, если результирующая строка является однозначной. Например, 2..3 на самом деле два числа: "2". И ".3". Аналогичным образом, 2-3 имеет значение "2" и "-3". Пробелы до и после команд ставить необязательно.

Синтаксис

Синтаксис использования атрибута XAML для StreamGeometry расширяемого языка разметки приложений состоит из необязательного FillRule значения и одного или нескольких описаний рисунков.

Использование атрибута XAML на StreamGeometry
<объект property ="[ ] figureDescriptionfillRule[ ]figureDescription*" ... />

Синтаксис использования атрибута XAML для PathFigureCollection расширяемого языка разметки приложений состоит из одного или нескольких описаний рисунков.

Использование атрибута XAML на PathFigureCollection
<объект property =" figureDescription[ ]figureDescription*" ... />
Срок Description
fillRule System.Windows.Media.FillRule

Указывает, используется ли StreamGeometry или NonzeroFillRuleиспользуется EvenOdd .

- F0 задает EvenOdd правило заполнения.
- F1 задает Nonzero правило заполнения.

Если эта команда опущена, подпат использует поведение по умолчанию.EvenOdd Если эта команда используется, ее необходимо размещать вначале.
figureDescription Фигура, состоящая из команды перемещения, команд рисования и необязательной команды закрытия.

moveCommand drawCommands [ closeCommand ]
moveCommand Команда перемещения, которая указывает начальную точку фигуры. См. раздел "Команда перемещения".
drawCommands Одна или несколько команд рисования, описывающих содержимое фигуры. См. раздел "Команды рисования".
closeCommand Необязательная команда, которая закрывает фигуру. См. раздел "Закрыть команду".

Команда перемещения

Задает начальную точку новой фигуры.

Синтаксис
MstartPoint

- или -

mstartPoint
Срок Description
startPoint System.Windows.Point

Начальная точка новой фигуры.

Верхний регистр указывает, что является абсолютным значением; нижний регистр M m указывает, что startPoint startPoint это смещение до предыдущей точки или (0,0), если нет. Если после команды перемещения указано несколько точек, будет нарисована линия к этим точкам, как в случае указания команды рисования линии.

Команды рисования

Команда рисования может состоять из нескольких команд формы. Имеются следующие команды формы: линия, горизонтальная линия, вертикальная линия, кривая Безье третьего порядка, кривая Безье второго порядка, гладкая кривая Безье третьего порядка, гладкая кривая Безье второго порядка и эллиптическая дуга.

Все команды можно вводить как прописными, так и строчными буквами. Прописными буквами определяются абсолютные значения, а строчными —относительные. Контрольная точка для этого сегмента указывается относительно конечной точки в предыдущем примере.

Совет

При последовательном вводе нескольких команд одного типа можно опустить дубликат команды; например, L 100,200 300,400 эквивалентно L 100,200 L 300,400.

Команда рисования линии

Создает прямую линию между текущей и заданной конечной точками. l 20 30 и L 20,30 являются примерами допустимых команд строки .

Синтаксис
Lконечная точка

- или -

lконечная точка
Срок Description
endPoint System.Windows.Point

Конечная точка строки.

Верхний регистр указывает, что является абсолютным значением; нижний регистр L l указывает, что endPoint endPoint это смещение до предыдущей точки или (0,0), если нет.

Команда рисования горизонтальной линии

Создает горизонтальную линию между текущей точкой и заданной координатой X. H 90 — пример допустимой команды рисования горизонтальной линии.

Синтаксис
H x

- или -

h x
Срок Description
x System.Double

Координата X конечной точки линии.

Верхний регистр указывает, что является абсолютным значением; нижний регистр H h указывает, что x x это смещение до предыдущей точки или (0,0), если нет.

Команда рисования вертикальной линии

Создает вертикальную линию между текущей точкой и заданной координатой Y. v 90 — пример допустимой команды рисования вертикальной линии.

Синтаксис
V y

- или -

v y
Срок Description
г System.Double

Координата Y конечной точки линии.

Верхний регистр указывает, что является абсолютным значением; нижний регистр V v указывает, что y y это смещение до предыдущей точки или (0,0), если нет.

Команда рисования кривой Безье третьего порядка

Создает кубическую кривую Bezier между текущей точкой и указанной конечной точкой с помощью двух указанных контрольных точек (controlPoint1 и controlPoint2). C 100,200 200,400 300,200 — пример допустимой команды рисования кривой линии.

Синтаксис
CcontrolPoint1controlPoint2endPoint

- или -

ccontrolPoint1controlPoint2endPoint
Срок Description
controlPoint1 System.Windows.Point

Первая контрольная точка кривой, которая определяет начальную касательную к кривой.
controlPoint2 System.Windows.Point

Вторая контрольная точка кривой, которая определяет конечную касательную к кривой.
endPoint System.Windows.Point

Точка для рисования кривой.

Команда рисования кривой Безье второго порядка

Создает квадратную кривую Bezier между текущей точкой и указанной конечной точкой с помощью указанной контрольной точки (controlPoint). q 100,200 300,200 — пример допустимой команды рисования кривой Безье второго порядка.

Синтаксис
Q controlPoint endPoint

- или -

q controlPoint endPoint
Срок Description
controlPoint System.Windows.Point

Контрольная точка кривой, которая определяет начальную и конечную касательные к кривой.
endPoint System.Windows.Point

Точка для рисования кривой.

Команда рисования гладкой кривой Безье третьего порядка

Создает кривую Безье третьего порядка между текущей и заданной конечной точками. Предполагается, что первая контрольная точка является отражением второй контрольной точки предыдущей команды относительно текущей точки. Если нет предыдущей команды или если предыдущая команда не является командой рисования кривой Безье третьего порядка или командой рисования гладкой кривой Безье третьего порядка, считается, что первая контрольная точка совпадает с текущей точкой. Вторая контрольная точка, контрольная точка конца кривой, задается controlPoint2. Например, S 100,200 200,300 допустимая команда гладкой кубической кривой Bezier.

Синтаксис
S controlPoint2endPoint

- или -

s controlPoint2endPoint
Срок Description
controlPoint2 System.Windows.Point

Контрольная точка кривой, которая определяет конечную касательную к кривой.
endPoint System.Windows.Point

Точка для рисования кривой.

Команда рисования гладкой кривой Безье второго порядка

Создает кривую Безье второго порядка между текущей и заданной конечной точками. Предполагается, что контрольная точка является отражением контрольной точки предыдущей команды относительно текущей точки. Если нет предыдущей команды или если предыдущая команда не является командой рисования кривой Безье второго порядка или командой рисования гладкой кривой Безье второго порядка, считается, что контрольная точка совпадает с текущей точкой.

Синтаксис
T endPoint

- или -

t endPoint
Срок Description
endPoint System.Windows.Point

Точка для рисования кривой.

Команда рисования эллиптической дуги

Создает эллиптическую дугу между текущей и заданной конечной точками.

Синтаксис
A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint

- или -

a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint
Срок Description
size System.Windows.Size

Радиусы арки X и Y.
rotationAngle System.Double

Поворот эллипса в градусах.
isLargeArcFlag Значение 1, если угол дуги должен быть 180 градусов или больше, в противном случае — значение 0.
sweepDirectionFlag Значение 1, если дуга рисуется в направлении положительного угла, в противном случае — значение 0.
endPoint System.Windows.Point

Точка, в которую рисуется дуга.

Команда закрытия

Заканчивает текущую фигуру и создает линию, соединяющую текущую точку с начальной точкой фигуры. Эта команда создает соединительную линию (угол) между последним и первым сегментами фигуры.

Синтаксис
Z

- или -

z

Синтаксис точки

Описывает координаты x-и y точки, где (0,0) — левый верхний угол.

Синтаксис
x , y

- или -

x y
Срок Description
x System.Double

Координата X точки.
y System.Double

Координата Y точки.

Специальные значения

Вместо стандартных числовых значений можно использовать следующие специальные значения. Эти значения чувствительны к регистру.

Infinity
Double.PositiveInfinityПредставляет .

-бесконечность
Double.NegativeInfinityПредставляет .

Не число
Double.NaNПредставляет .

Можно также использовать экспоненциальное представление чисел. Например, +1.e17 является допустимым значением.

См. также