移動與繪製命令語法

瞭解您可以用來將路徑幾何指定為 XAML 屬性值的移動和繪製命令 (迷你語言)。 許多設計與圖形工具會使用移動和繪製命令,以序列化和交換格式輸出向量圖形或圖形。

使用移動和繪製命令字串的屬性

XAML 的內部類型轉換器支援行動和繪製命令語法,其會剖析命令並產生執行階段圖形表示法。 這個表示法基本上是一組已完成的向量,可供呈現。 向量本身未完成簡報詳細資料;您仍然需要在元素上設定其他值。 對於 Path 物件,您也需要 FillStroke 和其他屬性的值,然後該 Path 必須以某種方式連接到視覺化樹狀結構。 若為 PathIcon 物件,請設定 Foreground 屬性。

Windows 執行階段中有兩個屬性可以使用代表移動和繪製命令的字串:Path.DataPathIcon.Data。 如果您藉由指定移動和繪製命令來設定其中一個屬性,您通常會將它設定為 XAML 屬性值,以及該元素的其他必要屬性。 無需深入瞭解具體細節,如下圖所示:

<Path x:Name="Arrow" Fill="White" Height="11" Width="9.67"
  Data="M4.12,0 L9.67,5.47 L4.12,10.94 L0,10.88 L5.56,5.47 L0,0.06" />

使用移動和繪製命令與使用 PathGeometry

對於 Windows 執行階段 XAML,移動和繪製命令會產生具有 Figures 屬性值的單一 PathFigure 物件 PathGeometry。 每個繪製命令都會在該單一 PathFigureSegment 集合中產生 PathSegment 衍生類別、移動命令會變更 StartPoint,以及關閉命令集 IsClosedtrue 的存在。 如果您在執行階段檢查資料值,則可以將此結構瀏覽為物件模型。

基本語法

移動與繪製命令的語法可以摘要如下:

  1. 從選擇性填滿規則開始。 通常只有在您不想要 EvenOdd 預設值時,才指定這個值。 (稍後會詳細介紹 EvenOdd。)
  2. 只指定一個移動命令。
  3. 指定一或多個繪製命令。
  4. 指定關閉命令。 您可以省略關閉命令,但這會使您的圖形保持開啟 (這並不常見)。

此語法的一般規則如下:

  • 每個命令都以一個字母表示。
  • 該字母可以是大寫或小寫。 大小寫很重要,正如我們將描述的。
  • 除了關閉命令之外,每個命令通常後面都會接著一或多個數字。
  • 如果命令有多個數字,請以逗號或空格分隔。

[fillRule]moveCommanddrawCommand[drawCommand*][closeCommand]

許多繪製命令都會使用點,您可以在其中提供 x,y 值。 每當看到 *points 預留位置時,您可以假設您會為點的 x,y 值提供兩個十進位值。

當結果不模棱兩可時,通常可以省略空格。 事實上,如果您使用逗號做為所有數字集的分隔符號 (點和大小),則可以省略所有空格。 例如,此用法是合法的:F1M0,58L2,56L6,60L13,51L15,53L6,64z。 但為了清楚起見,在命令之間包含空格更常見。

請勿使用逗號做為小數的小數點;命令字串由 XAML 解釋,並且不考慮與 en-us 區域設定中使用的不同的文化特性特定數字格式慣例。

語法細節

填滿規則

選擇性填滿規則有兩個可能的值:F0F1。 (F 一律為大寫。) F0 是預設值;它會產生 EvenOdd 填充行為,因此您通常不需要指定它。 使用 F1 取得 Nonzero 填滿行為。 這些填滿值會對齊 FillRule 列舉的值。

移動命令

指定新圖表的起點。

語法
M startPoint
- 或 -
mstartPoint
詞彙 描述
startPoint
新圖表的起點。

大寫 M 表示 startPoint 是絕對座標;小寫 m 表示 startPoint 是到前一個點的位移量,如果沒有前一個點,則為 (0,0)。

注意:移動命令之後指定多個點是合法的。 線條會繪製到這些點,就像您指定了線條命令一樣。 不過,這不是建議的樣式;請改用專用列命令。

繪製命令

繪製命令可以由多個形狀命令組成:直線、水平線、垂直線、三次方貝茲曲線、二次方貝茲曲線、平滑三次貝茲曲方線、平滑二次方貝茲曲線和橢圓形弧線。

對於所有繪製命令,大小寫很重要。 大寫字母表示絕對座標,小寫字母表示相對於前一個命令的座標。

線段的控制點是相對於前一線段的終點的。 當連續輸入多個相同類型的命令時,可以省略重複的命令項目。 例如,L 100,200 300,400 相當於 L 100,200 L 300,400

線命令

在目前的點和指定的點之間建立直線。 l 20 30L 20,30 為有效命令的範例。 定義 LineGeometry 物件的等效項。

語法
LendPoint
- 或 -
lendPoint
詞彙 描述
endPoint
行的結束點。

水平線命令

在目前的點和指定的 X 座標之間建立水平線。 H 90 為有效水平線命令的範例。

語法
H x
- 或 -
h x
詞彙 描述
x Double
線條結束點的 X 座標。

垂直線命令

在目前的點和指定的 Y 座標之間建立垂直線。 v 90 為有效垂直線命令的範例。

語法
V y
- 或 -
v y
詞彙 描述
y Double
線條結束點的 Y 座標。

三次方貝茲曲線命令

使用兩個指定的控制點 (controlPoint1controlPoint2) 在目前點和指定終點之間建立三次方貝茲曲線。 C 100,200 200,400 300,200 為有效曲線命令的範例。 使用 BezierSegment 物件定義 PathGeometry 物件的等效項。

語法
C controlPoint1controlPoint2endPoint
- 或 -
c controlPoint1controlPoint2endPoint
詞彙 描述
controlPoint1
曲線的第一個控制點,它能決定曲線的起始正切函數。
controlPoint2
曲線的第二個控制點,它能決定曲線的結束正切函數。
endPoint
曲線要繪製到的點。

二次方貝茲曲線命令

使用指定的控制點 (controlPoint) 在目前點和指定的終點之間建立二次方貝茲曲線。 q 100,200 300,200 為有效二次方貝茲曲線命令的範例。 使用 QuadraticBezierSegment 定義 PathGeometry 的等效項。

語法
Q controlPoint endPoint
- 或 -
q controlPoint endPoint
詞彙 描述
controlPoint
曲線的控制點,它能決定曲線的起始正切函數和結束正切函數。
endPoint
曲線要繪製到的點。

平滑三次方貝茲曲線命令

在目前的點和指定的結束點之間建立三次方貝茲曲線。 第一個控制點會假設為 (相對於目前的點) 上一個命令之第二個控制點的反映。 如果沒有上一個命令,或者上一個命令不是三次方貝茲曲線命令或平滑三次方貝茲曲線命令,則會假設第一個控制點和目前的點一致。 第二個控制點 (曲線末端的控制點) 由 controlPoint2 指定。 例如,S 100,200 200,300 為有效的平滑三次方貝茲曲線命令。 此命令定義了與 BezierSegment 等效的 PathGeometry,其中前面有曲線段。

語法
ScontrolPoint2endPoint
- 或 -
scontrolPoint2 endPoint
詞彙 描述
controlPoint2
曲線的控制點,它能決定曲線的結束正切函數。
endPoint
曲線要繪製到的點。

平滑二次方貝茲曲線命令

在目前的點和指定的結束點之間建立二次方貝茲曲線。 控制點會假設為 (相對於目前的點) 上一個命令之控制點的反映。 如果沒有上一個命令,或者上一個命令不是二次方貝茲曲線命令或平滑二次方貝茲曲線命令,則控制點和目前的點一致。 此命令定義了具有 QuadraticBezierSegmentPathGeometry 的等效項,其中前面有曲線段。

語法
TcontrolPointendPoint
- 或 -
tcontrolPointendPoint
詞彙 描述
controlPoint
曲線的控制點,它能決定曲線的起始正切函數。
endPoint
曲線要繪製到的點。

橢圓形弧線命令

在目前的點和指定的結束點之間建立橢圓形弧線。 使用 ArcSegment 定義 PathGeometry 的等效項。

語法
A sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
- 或 -
a sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
詞彙 描述
size 大小
弧線的 x 半徑和 y 半徑。
rotationAngle Double
橢圓形的旋轉 (以角度為單位)。
isLargeArcFlag 如果弧線的角度應該為 180 度或大於 180 度,則設定為 1;否則,請設定為 0。
sweepDirectionFlag 如果弧線是以正值角度的方向繪製,則設定為 1;否則,請設定為 0。
endPoint
弧線要繪製到的點。

關閉命令

結束目前的圖表,並建立連接目前的點和圖表起點的線條。 此命令會在圖表的最後一個區段和第一個區段之間建立線條聯結 (邊角)。

語法
Z
- 或 -
z

點語法

描述點的 x 座標和 y 座標。 另請參閱 Point

語法
xy
- 或 -
xy
詞彙 描述
x Double
點的 X 座標。
y Double
點的 Y 座標。

其他注意事項

除了標準數值,您也可以使用下列特殊值。 這些值會區分大小寫。

  • 無限大:代表正無限大
  • -無限大:代表負無限大
  • NaN:代表 NaN

您可以使用科學表示法,而不是使用十進位或整數。 例如,+1.e17 為有效的值。

產生移動和繪製命令的設計工具

使用 Blend for Microsoft Visual Studio 2015 中的 Pen 工具和其他繪圖工具通常會產生具有移動和繪圖命令的 Path 物件。

您可能會在控制項 Windows 執行階段 XAML 預設範本中,定義的部分控制項組件中看到現有的移動和繪製命令資料。 例如,某些控制項使用 PathIcon,其資料定義為行動和繪製命令。

其他常用的向量圖形設計工具可以使用匯出工具或外掛程式,以 XAML 形式輸出向量。 它們通常在配置容器中建立 Path 物件,並使用 Path.Data 的移動和繪製命令。 XAML 中可能會有多個 Path 元素,以便套用不同的筆刷。 這些匯出工具或外掛程式中有許多原本是針對 Windows Presentation Foundation (WPF) XAML 或 Silverlight 所撰寫,但 XAML 路徑語法與 Windows 執行階段 XAML 相同。 通常,您可以從匯出工具使用 XAML 區塊,並將其貼到 Windows 執行階段 XAML 頁面。 (不過,您將無法使用 RadialGradientBrush,如果這是已轉換 XAML 的一部分,因為 Windows 執行階段 XAML 不支援該筆刷。)