在 WPF 概述中 形状和基本绘图 和 几何图形概述中讨论路径,但本主题详细介绍了可用于使用可扩展应用程序标记语言(XAML)更紧凑地指定路径几何图形的强大而复杂的微型语言。
先决条件
若要了解本主题,应熟悉 Geometry 对象的基本功能。 有关详细信息,请参阅 几何图形概述。
StreamGeometry 和 PathFigureCollection Mini-Languages
WPF 提供了两个类,这些类提供用于描述几何路径的迷你语言:StreamGeometry 和 PathFigureCollection。
设置 StreamGeometry类型的属性(例如 Geometry 的 Clip 属性或 UIElement 元素的 Data 属性)时,可以使用 Path 微型语言。 以下示例使用属性语法创建 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 的任何情况下,都可以使用 StreamGeometry;你应该使用它们中的哪一个呢? 创建路径后无需修改路径时,请使用 StreamGeometry;如果需要修改路径,请使用 PathGeometry。
有关 PathGeometry 和 StreamGeometry 对象之间的差异的详细信息,请参阅 Geometry Overview。
有关空格的注意事项
为简洁起见,以下语法部分中会显示一个空格,但在显示一个空格的地方,也可以接受多个空格。
实际上,两个数字不必用逗号或空格分隔,但只能在生成的字符串明确时执行此操作。 例如,2..3
实际上是两个数字:“2.”和“.3”。 同样,2-3
为“2”和“-3”。 命令之前或之后不需要空格。
语法
StreamGeometry 的 Extensible Application Markup Language (XAML) 属性用法语法由可选的 FillRule 值和一个或多个图形描述组成。
StreamGeometry XAML 属性用法 |
---|
<
对象属性=" [ fillRule ] figureDescription [ figureDescription ]* " ... /> |
PathFigureCollection 的 Extensible Application Markup Language (XAML) 属性用法语法由一个或多个图形描述组成。
PathFigureCollection XAML 属性用法 |
---|
<
对象属性=" figureDescription [ figureDescription ]* " ... /> |
术语 | DESCRIPTION |
---|---|
fillRule | System.Windows.Media.FillRule 指定 StreamGeometry 是使用 EvenOdd 还是 NonzeroFillRule。 - F0 确定了 EvenOdd 的填充规则。- F1 确定了 Nonzero 的填充规则。如果省略此命令,子路径将使用默认行为,即 EvenOdd。 如果指定此命令,则必须将其放在最前面。 |
figureDescription | 图形由一个移动命令,绘制命令和一个可选的关闭命令组成。moveCommand
drawCommands
[
closeCommand
]
|
moveCommand | 指定图形起点的移动命令。 请参阅移动命令部分。 |
drawCommands | 描述图形内容的一个或多个绘图命令。 请参阅绘制命令部分。 |
closeCommand | 用于关闭图形的可选关闭命令。 请参阅关闭命令部分。 |
移动命令
指定新图形的起点。
语法 |
---|
M
startPoint- 或 - m
startPoint |
术语 | DESCRIPTION |
---|---|
startPoint | System.Windows.Point 新图形的起点。 |
大写 M
指示 startPoint
是绝对值;小写 m
指示 startPoint
是上一点的偏移量,如果不存在,则为 (0,0)。 如果在移动命令后列出多个点,尽管指定了行命令,线还是会被绘制到这些点。
绘制命令
绘图命令可以包含多个形状命令。 以下形状命令可用:线条、水平线、垂直线、立方贝塞尔曲线、二次贝塞尔曲线、平滑立方贝塞尔曲线、平滑二次贝塞尔曲线和椭圆弧。
使用大写字母或小写字母输入每个命令:大写字母表示绝对值和小写字母表示相对值:该段的控制点相对于前面的示例的终点。
小窍门
按顺序输入同一类型的多个命令时,可以省略重复的命令条目;例如,L 100,200 300,400
等效于 L 100,200 L 300,400
。
直线命令
创建当前点和指定终点之间的直线。
l 20 30
和 L 20,30
是有效 行 命令的示例。
语法 |
---|
L
endPoint- 或 - l
endPoint |
术语 | DESCRIPTION |
---|---|
终点 | System.Windows.Point 线条的终点。 |
大写 L
指示 endPoint
是绝对值;小写 l
指示 endPoint
是上一点的偏移量,如果不存在,则为 (0,0)。
水平线命令
在当前点和指定的 x 坐标之间创建水平线。
H 90
是有效水平线命令的示例。
语法 |
---|
H
x- 或 - h
x |
术语 | DESCRIPTION |
---|---|
x | System.Double 线条终点的 x 坐标。 |
大写 H
指示 x
是绝对值;小写 h
指示 x
是上一点的偏移量,如果不存在,则为 (0,0)。
垂直线命令
在当前点和指定的 y 坐标之间创建一条垂直线。
v 90
是有效竖线命令的示例。
语法 |
---|
V
y- 或 - v
y |
术语 | DESCRIPTION |
---|---|
y | System.Double 线条终点的 y 坐标。 |
大写 V
指示 y
是绝对值;小写 v
指示 y
是上一点的偏移量,如果不存在,则为 (0,0)。
三次贝塞尔曲线命令
使用两个指定的控制点(controlPoint
1 和 controlPoint
2)在当前点和指定终点之间创建立方贝塞尔曲线。
C 100,200 200,400 300,200
是有效曲线命令的示例。
语法 |
---|
C
controlPoint 1controlPoint 2endPoint - 或 - c
controlPoint 1controlPoint 2endPoint |
术语 | DESCRIPTION |
---|---|
controlPoint 1 |
System.Windows.Point 曲线的第一个控制点,用于确定曲线的起始正切值。 |
controlPoint 2 |
System.Windows.Point 曲线的第二个控制点,用于确定曲线的结束正切值。 |
endPoint |
System.Windows.Point 绘制曲线将通过的点。 |
二次贝塞尔曲线命令
使用指定的控制点(controlPoint
)在当前点和指定终点之间创建二次贝塞尔曲线。
q 100,200 300,200
是有效的二次贝塞尔曲线命令的示例。
语法 |
---|
Q
controlPoint
endPoint
- 或 - q
controlPoint
endPoint
|
术语 | DESCRIPTION |
---|---|
controlPoint |
System.Windows.Point 曲线的控制点,用于确定曲线的开始和结束切线。 |
endPoint |
System.Windows.Point 绘制曲线将通过的点。 |
平滑三次贝塞尔曲线命令
在当前点和指定的终点之间创建一条立方贝塞尔曲线。 假定第一个控制点是上一个命令相对于当前点的第二个控制点的反射。 如果没有上一个命令,或者如果上一个命令不是立方贝塞尔曲线命令或平滑的立方贝塞尔曲线命令,则假定第一个控制点与当前点相吻合。 第二个控制点(曲线末尾的控制点)由 controlPoint
2 指定。 例如,S 100,200 200,300
是有效的平滑立方贝塞尔曲线命令。
语法 |
---|
S
controlPoint 2endPoint - 或 - s
controlPoint 2endPoint |
术语 | DESCRIPTION |
---|---|
controlPoint 2 |
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 |
如果弧线的角度应为 180 度或更大,则设置为 1;否则,设置为 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 坐标。 |
特殊值
还可以使用以下特殊值,而不是标准数值。 这些数值区分大小写。
Double.PositiveInfinity 表示无穷大。
-Infinity 表示 Double.NegativeInfinity。
NaN 表示 Double.NaN。
还可以使用科学表示法。 例如,+1.e17
是一个有效值。