路徑標記語法
WPF 中的形狀和基本繪圖概觀和幾何概觀中討論過了路徑,不過,本主題會詳細說明您可用於更緊湊地指定路徑幾何形狀的強大且復雜的迷你語言 (透過使用 Extensible Application Markup Language(XAML))。
必要條件
若要了解本主題,您應該熟悉 Geometry 物件的基本功能。 如需詳細資訊,請參閱 幾何概觀。
StreamGeometry 和 PathFigureCollection 迷你語言
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" />
設定 PathGeometry 的 Figures 屬性時,您可以使用 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。
如需 PathGeometry 與 StreamGeometry 物件之間差異的詳細資訊,請參閱幾何概觀。
關於空白字元
為了簡潔起見,會在後續的語法區段中會顯示單一空格,但是在顯示單一空格的位置也接受多個空格。
兩個數字實際上不必用逗號或空格分隔,但這只能在產生的字串明確時才可以這樣做。 例如,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 ]* " ... /> |
詞彙 | 描述 |
---|---|
fillRule | System.Windows.Media.FillRule 指定 StreamGeometry 是否使用 EvenOdd 或 NonzeroFillRule。 - F0 指定 EvenOdd 填滿規則。- F1 指定 Nonzero 填滿規則。如果您省略此命令,則子路徑會使用預設行為,也就是 EvenOdd。 如果您指定此命令,您必須先放置它。 |
figureDescription | 由移動命令、繪製命令以及選擇性的關閉命令所組成的圖表。moveCommand drawCommands [ closeCommand ] |
moveCommand | 指定圖表起點的移動命令。 請參閱移動命令一節。 |
drawCommands | 說明圖表內容的一或多個繪製命令。 請參閱繪製命令一節。 |
closeCommand | 關閉圖表的選擇性關閉命令。 請參閱關閉命令一節。 |
移動命令
指定新圖表的起點。
語法 |
---|
M startPoint- 或 - m startPoint |
詞彙 | 描述 |
---|---|
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 |
詞彙 | 描述 |
---|---|
endPoint | System.Windows.Point 行的結束點。 |
大寫 L
表示 endPoint
為絕對值;小寫 l
表示 endPoint
是前一個點的位移,或是 (0,0) (如果不存在前一個點的話)。
水平線命令
在目前的點和指定的 X 座標之間建立水平線。 H 90
為有效水平線命令的範例。
語法 |
---|
H x- 或 - h x |
詞彙 | 描述 |
---|---|
x | System.Double 線條結束點的 X 座標。 |
大寫 H
表示 x
為絕對值;小寫 h
表示 x
是前一個點的位移,或是 (0,0) (如果不存在前一個點的話)。
垂直線命令
在目前的點和指定的 Y 座標之間建立垂直線。 v 90
為有效垂直線命令的範例。
語法 |
---|
V y- 或 - v y |
詞彙 | 描述 |
---|---|
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 |
詞彙 | 描述 |
---|---|
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 |
詞彙 | 描述 |
---|---|
controlPoint |
System.Windows.Point 曲線的控制點,它能決定曲線的起始正切函數和結束正切函數。 |
endPoint |
System.Windows.Point 曲線要繪製到的點。 |
平滑三次方貝茲曲線命令
在目前的點和指定的結束點之間建立三次方貝茲曲線。 第一個控制點會假設為 (相對於目前的點) 上一個命令之第二個控制點的反映。 如果沒有上一個命令,或者上一個命令不是三次方貝茲曲線命令或平滑三次方貝茲曲線命令,則會假設第一個控制點和目前的點一致。 第二個控制點 (曲線結尾的控制點) 是由 controlPoint
2 指定。 例如,S 100,200 200,300
為有效的平滑三次方貝茲曲線命令。
語法 |
---|
S controlPoint 2endPoint - 或 - s controlPoint 2endPoint |
詞彙 | 描述 |
---|---|
controlPoint 2 |
System.Windows.Point 曲線的控制點,它能決定曲線的結束正切函數。 |
endPoint |
System.Windows.Point 曲線要繪製到的點。 |
平滑二次方貝茲曲線命令
在目前的點和指定的結束點之間建立二次方貝茲曲線。 控制點會假設為 (相對於目前的點) 上一個命令之控制點的反映。 如果沒有上一個命令,或者上一個命令不是二次方貝茲曲線命令或平滑二次方貝茲曲線命令,則控制點和目前的點一致。
語法 |
---|
T endPoint - 或 - t endPoint |
詞彙 | 描述 |
---|---|
endPoint |
System.Windows.Point 曲線要繪製到的點。 |
橢圓形弧線命令
在目前的點和指定的結束點之間建立橢圓形弧線。
語法 |
---|
A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint - 或 - a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint |
詞彙 | 描述 |
---|---|
size |
System.Windows.Size 弧線的半徑 X 和 Y。 |
rotationAngle |
System.Double 橢圓形的旋轉 (以角度為單位)。 |
isLargeArcFlag |
如果弧線的角度應該為 180 度或大於 180 度,則設定為 1;否則,請設定為 0。 |
sweepDirectionFlag |
如果弧線是以正值角度的方向繪製,則設定為 1;否則,請設定為 0。 |
endPoint |
System.Windows.Point 弧線要繪製到的點。 |
關閉命令
結束目前的圖表,並建立連接目前的點和圖表起點的線條。 此命令會在圖表的最後一個區段和第一個區段之間建立線條聯結 (邊角)。
語法 |
---|
Z - 或 - z |
點語法
描述點的 x 和 y 座標,其中 (0,0) 是左上角。
語法 |
---|
x , y - 或 - x y |
詞彙 | 描述 |
---|---|
x |
System.Double 點的 X 座標。 |
y |
System.Double 點的 Y 座標。 |
特殊值
除了標準數值,您也可以使用下列特殊值。 這些值會區分大小寫。
Infinity
表示 Double.PositiveInfinity。
-Infinity
表示 Double.NegativeInfinity。
NaN
表示 Double.NaN。
您也可以使用科學記號標記法。 例如,+1.e17
為有效的值。