尽管在 WPF 中的形状和基本图形概述 几何概述 中描述了路径,但本主题还详细介绍了可用来使用 Extensible Application Markup Language (XAML) 更简洁地指定路径几何的强大且复杂的微型语言。

若要了解本主题,应熟悉 Geometry 对象的基本功能。 有关详细信息,请参阅 几何概述

StreamGeometry and PathFigureCollection Mini-Languages

WPF 提供了两个类,它们提供了用于描述几何路径的微型语言: StreamGeometry PathFigureCollection

  • 设置 Geometry 类型的属性(例如 UIElement 元素的 Clip 属性或 Path 元素的 Data 属性)时,可以使用 StreamGeometry 微型语言。 以下示例使用属性语法创建 StreamGeometry

    <Path Stroke="Black" Fill="Gray"
          Data="M 10,100 C 10,300 300,-200 300,100" />
    
  • 在设置 PathGeometryFigures 属性时,可以使用 PathFigureCollection 微型语言。 以下示例使用属性语法为 PathGeometry 创建 PathFigureCollection

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

    从前面的示例中可以看出,两种微型语言非常相似。 在可以使用 StreamGeometry 的任何情况下,都可以使用 PathGeometry;你应该使用它们中的哪一个呢? 在创建路径后无需修改路径时,请使用 StreamGeometry;如果需要修改路径,请使用 PathGeometry

    有关 PathGeometryStreamGeometry 对象之间的差异的详细信息,请参阅几何概述

    有关空格的注意事项

    为简洁起见,随后的语法部分中显示一个空格,但在显示一个空格的地方,多个空格也可以接受。

    两个数字之间不必用逗号或空格分隔,但仅适用于生成的字符串明确时。 例如,2..3 实际是两个数字:“2.”和“.3”。 同样,2-3 是“2”和“-3”。 命令前面或后面也无需加空格。

    StreamGeometry 的 Extensible Application Markup Language (XAML) 属性用法语法由可选的 FillRule 值和一个或多个图形描述组成。

    StreamGeometry XAML 属性用法 fillRule System.Windows.Media.FillRule

    指定 StreamGeometry 是使用 EvenOdd 还是 NonzeroFillRule

    - F0 指定 EvenOdd 填充规则。
    - F1 指定 Nonzero 填充规则。

    如果省略该命令,子路径将使用默认行为,即 EvenOdd。 如果指定该命令,须先设置命令。 figureDescription 图形由一个移动命令,绘制命令和一个可选的关闭命令组成。

    moveCommand drawCommands [ closeCommand ] moveCommand 用于指定图形起点的移动命令。 请参阅移动命令部分。 drawCommands 用于描述图形内容的一个或多个绘图命令。 请参阅绘制命令部分。 closeCommand 用于关闭图形的可选关闭命令。 请参阅关闭命令部分。

    大写字母 M 表明 startPoint 是一个绝对值;小写字母 m 表明 startPoint 是对前一点的偏移,如果都不存在的话,则为 (0,0)。 如果在移动命令之后列出多个点,可以绘制一条连接到这些点的直线,尽管已指定了直线命令。

    绘制命令可以由几个形状命令组成。 以下形状命令可用:直线、水平线、竖线、三次贝塞尔曲线、二次贝塞尔曲线、平滑三次贝塞尔曲线、平滑二次贝塞尔曲线和椭圆弧。

    可以使用大写或小写字母输入每个命令:大写字母表示绝对值,小写字母表示相对值:该线段的控制点相对于前面示例的终点。 当按顺序输入多个相同类型的命令时,可以省略重复的命令输入;例如,L 100,200 300,400 相当于 L 100,200 L 300,400。 下表描述了“移动”和“绘制”命令。

    在当前点和指定的终点之间创建一条直线。 l 20 30L 20,30 是有效的“直线”命令示例。

  •