WPF的XAML提供了一系列功能强大、用法复杂的 mini-language 来描述可扩展应用程序标记语言 (XAML) 中的几何路径。如下所示:
<Path Stroke= "Black" Fill= "Gray"
Data= "M 10,100 C 10,300 300,-200 300,100" />
</Canvas>
| Command | Name | Description |
| F i | FillRule | i=0:EvenOdd. i=1:NonZero. |
| M x y | Move | Moveto (x, y). |
| m x y | Relative move | Moveto (x0+x, y0+y). |
| L x y | Line | Drawline to (x, y). |
| l x y | Relative line | Drawline to (x0+x, y0+y). |
| H x | Horizontal line | Drawline to (x, y0). |
| h x | Relative horizontal line | Drawline to (x0+x, y0). |
| V y | Vertical line | Drawline to (x0, y). |
| v y | Relative vertical line | Drawline to (x0, y0+y). |
| A xr yr a i j x y | Arc | Drawarc to (x, y) based on ellipse with radii (xr,yr) rotated a degrees. i=1:IsLargeArc. j=1: Clockwise. |
| a xr yr a i j x y | Relative arc | Drawarc to (x0+x, y0+y). |
| C x1 y1 x2y2 x3 y3 | CubicBézier | DrawBézier to (x3, y3) withcontrol points (x1, y1) and (x2, y2). |
| c x1 y1 x2y2 x3 y3 | Relative cubic Bézier | DrawBézier to (x0+x3,y0+y3) with control points (x0+x1, y0+y1) and (x0+x2, y0+y2). |
| S x2 y2 x3 y3 | Smooth cubic Bézier | DrawBézier to (x3, y3) with reflected control point and (x2, y2). |
| s x2 y2 x3y3 | Relative smooth cubic Bézier | DrawBézier to (x0+x3,y0+y3) with reflected control point and (x0+x2, y0+y2). |
| Q x1 y1 x2y2 | Quadratic Bézier | Drawquadratic Bézier to (x2, y2)with control point (x1, y1). |
| q x1 y1 x2y2 | Relative quadratic Bézier | Drawquadratic Bézier to (x0+x2,y0+y2) with control point(x0+x1, y0+y1). |
| Z z | Closefigure |
分隔符和空白
为简洁起见,下文中的语法部分显示的是单个空格,实际上在使用单个空格的地方也可以使用多个空格。
如果结果字符串比较明确,则无需使用逗号或空白将两个数字隔开。例如,2..3 解释为两个数字:“2.”和“.3”。同样,2-3 包含两个数字:“2”和“-3”。
命令前后的空格也不是必需的。
语法
XAML 路径语法由一个可选的 FillRule 值以及一个或多个图形说明组成。
| 路径 XAML 属性用法 |
|---|
| <对象属性 ="[fillRule] figureDescription[ figureDescription]*" ... /> |
| 术语 | 说明 |
|---|---|
| fillRule | 指定该路径使用 EvenOdd 还是 NonZero 填充规则值:
如果省略此命令,则路径使用默认行为,即 EvenOdd。如果指定此命令,则必须将其置于最前面。 |
| figureDescription | 图形由移动命令、绘制命令和可选的关闭命令组成。 moveCommand drawCommands [ closeCommand ] |
| moveCommand | 指定图形起点的移动命令。 |
| drawCommands | 一个或多个描绘图形内容的绘制命令。 |
| closeCommand | 可选的关闭命令,用于关闭图形。 |
移动命令
绘制命令
draw 命令可以由若干个形状命令组成。提供以下形状命令:直线、水平线、垂直线、三次方贝塞尔曲线、二次贝塞尔曲线、平滑的三次方贝塞尔曲线、平滑的二次贝塞尔曲线和椭圆弧线。
通过使用一个大写或小写字母输入各命令:其中大写字母表示绝对值,小写字母表示相对值。线段的控制点是相对于上一线段的终点而言的。依次输入多个同一类型的命令时,可以省略重复的命令项;例如,L 100,200 300,400 等同于 L 100,200 L 300,400。
直线命令
在当前点与指定的终点之间创建一条直线。l 20 30 和 L 20,30 都是有效的 line 命令示例。
| 语法 |
|---|
| L endPoint - 或 - l endPoint |
| 术语 | 说明 |
|---|---|
| endPoint | 直线的终点。 |
水平线命令
垂直线命令
三次方贝塞尔曲线命令
通过使用两个指定的控制点(controlPoint1 和 controlPoint2)在当前点与指定的终点之间创建一条三次方贝塞尔曲线。C 100,200 200,400 300,200 是有效的曲线命令示例。
| 语法 |
|---|
| C controlPoint1 controlPoint2 endPoint - 或 - c controlPoint1 controlPoint2 endPoint |
二次贝塞尔曲线命令
通过使用指定的控制点 (controlPoint) 在当前点与指定的终点之间创建一条二次贝塞尔曲线。q 100,200 300,200 是有效的二次贝塞尔曲线命令示例。
| 语法 |
|---|
| Q controlPoint endPoint - 或 - q controlPoint endPoint |
平滑的三次方贝塞尔曲线命令
在当前点与指定的终点之间创建一条三次方贝塞尔曲线。第一个控制点假定为前一个命令的第二个控制点相对于当前点的反射。如果前一个命令不存在,或者前一个命令不是三次方贝塞尔曲线命令或平滑的三次方贝塞尔曲线命令,则假定第一个控制点就是当前点。第二个控制点,即曲线终端的控制点,由 controlPoint2 指定。例如,S 100,200 200,300 是一个有效的平滑三次方贝塞尔曲线命令。
| 语法 |
|---|
| S controlPoint2 endPoint - 或 - s controlPoint2 endPoint |
平滑的二次贝塞尔曲线命令
在当前点与指定的终点之间创建一条二次贝塞尔曲线。控制点假定为前一个命令的控制点相对于当前点的反射。如果前一个命令不存在,或者前一个命令不是二次贝塞尔曲线命令或平滑的二次贝塞尔曲线命令,则此控制点就是当前点。
| 语法 |
|---|
| T controlPoint endPoint - 或 - t controlPoint endPoint |
椭圆弧线命令
在当前点与指定的终点之间创建一条椭圆弧线。
| 语法 |
|---|
| A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint - 或 - a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint |
特殊值
除标准数值以外,您还可以使用以下特殊值。这些值区分大小写。
| 值 | 说明 |
|---|---|
| Infinity | 表示正无穷大的 Double 值 (Double..::.PositiveInfinity)。 |
| -Infinity | 表示负无穷大的 Double 值 (Double..::.NegativeInfinity)。 |
| NaN | 表示 NaN Double 值 (Double..::.NaN)。 |
此外,您还可以使用科学计数法。例如,+1.e17 是有效值。

本文详细介绍了WPF中XAML路径的绘制方法及语法,包括移动、直线、水平线、垂直线、贝塞尔曲线等多种绘制命令,并解释了如何使用这些命令创建复杂的几何图形。
1万+

被折叠的 条评论
为什么被折叠?



