路徑標記語法
在 WPF 中圖案和基本繪圖概觀和幾何概觀中曾討論路徑,但是本主題詳述的更為強大複雜的迷你語言 (Mini-Language),可以讓您使用Extensible Application Markup Language (XAML) 更精簡地指定路徑幾何。
本主題包含下列章節。
必要條件
若要了解本主題,您應該熟悉 Geometry 物件的基本功能。 如需詳細資訊,請參閱 幾何概觀。
StreamGeometry 和 PathFigureCollection 迷你語言
WPF 有兩個類別可提供用來描述幾何路徑的迷你語言:StreamGeometry 和 PathFigureCollection。
您會在設定 Geometry 型別的屬性 (Property) (如 UIElement 的 Clip 屬性,或 Path 項目的 Data 屬性) 時使用 StreamGeometry 迷你語言。 下列範例會使用屬性 (Attribute) 語法建立 StreamGeometry。
<Path Stroke="Black" Fill="Gray" Data="M 10,100 C 10,300 300,-200 300,100" />
您會在設定 PathGeometry 的 Figures 屬性 (Property) 時使用 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) 屬性 (Attribute) 使用語法是由選擇性的 FillRule 值和一個或多個圖形描述所組成。
StreamGeometry XAML 屬性使用方式 |
---|
<object property="[fillRule] figureDescription[figureDescription]*" ... /> |
PathFigureCollection 的Extensible Application Markup Language (XAML) 屬性 (Attribute) 使用語法是由一個或多個圖形描述所組成。
PathFigureCollection XAML 屬性使用方式 |
---|
<object property="figureDescription[figureDescription]*" ... /> |
詞彙 |
說明 |
---|---|
fillRule |
指定 StreamGeometry 是使用 EvenOdd 還是 Nonzero FillRule。 如果您省略這個命令,子路徑會使用預設行為,即 EvenOdd。 如果您指定這個命令,必須先放置它。 |
figureDescription |
圖形是由移動命令、繪製命令和選擇性的關閉命令所組成。 moveCommanddrawCommands [closeCommand] |
moveCommand |
移動命令,負責指定圖形的起始點。 請參閱移動命令一節。 |
drawCommands |
一個或多個繪製命令,負責描述圖形的內容。 請參閱繪製命令一節。 |
closeCommand |
選擇性的關閉命令,負責關閉圖形。 請參閱關閉命令一節。 |
移動命令
指定新圖形的起始點。
語法 |
---|
M startPoint -或- m startPoint |
詞彙 |
說明 |
---|---|
startPoint |
新圖形的起始點。 |
大寫的 M 表示 startPoint 是絕對值,小寫的 m 表示 startPoint 是和前一個點相比的位移 (Offset),如果沒有前一個點就以 (0,0) 為基準。 如果您在移動命令之後列出多個點,即使您有指定線條命令,仍會將線繪製到這些點。
繪製命令
繪製命令可以由數個圖案命令組成。 圖案命令包括:線條、水平線、垂直線、三次方貝茲曲線、二次方貝茲曲線、平滑三次方貝茲曲線、平滑二次方貝茲曲線和橢圓弧線。
您可以用大寫或小寫字母輸入每個命令:大寫字母表示絕對值,小寫字母表示相對值,在前面的範例中,該區段的控制點是相對於前一個範例的結束點。 接連輸入不止一個相同型別的命令時,可以不用重複輸入命令,例如 L 100,200 300,400 相當於 L 100,200 L 300,400。 下表描述 move 和 draw 命令。
線條命令
在目前點和指定的結束點之間建立一條直線。 l 20 30 和 L 20,30 為有效 line 命令的範例。
語法 |
---|
L endPoint -或- l endPoint |
詞彙 |
說明 |
---|---|
endPoint |
行的終點。 |
水平線命令
在目前點和指定的 X 座標之間建立一條水平線。 H 90 是有效水平線命令的範例。
語法 |
---|
H x -或- h x |
詞彙 |
說明 |
---|---|
x |
線條結束點的 X 座標。 |
垂直線命令
在目前點和指定的 Y 座標之間建立一條垂直線。 v 90 是有效垂直線命令的範例。
語法 |
---|
V y -或- v y |
詞彙 |
說明 |
---|---|
y |
線條結束點的 Y 座標。 |
三次方貝茲曲線命令
使用兩個指定的控制點 (controlPoint1 和 controlPoint2),在目前點和指定的結束點之間建立一條三次方貝茲曲線。 C 100,200 200,400 300,200 是有效曲線命令的範例。
語法 |
---|
C controlPoint1 controlPoint2 endPoint -或- c controlPoint1 controlPoint2 endPoint |
詞彙 |
說明 |
---|---|
controlPoint1 |
曲線的第一個控制點,決定了曲線的起始正切函數。 |
controlPoint2 |
曲線的第二個控制點,決定了曲線的結束正切函數。 |
endPoint |
曲線要繪製到的點。 |
二次方貝茲曲線命令
使用指定的控制點 (controlPoint),在目前點和指定的結束點之間建立一條二次方貝茲曲線。 q 100,200 300,200 是有效二次方貝茲曲線命令的範例。
語法 |
---|
Q controlPoint endPoint -或- q controlPoint endPoint |
詞彙 |
說明 |
---|---|
controlPoint |
曲線的控制點,決定了曲線的起始和結束正切函數。 |
endPoint |
曲線要繪製到的點。 |
平滑三次方貝茲曲線命令
在目前點和指定的結束點之間建立一條三次方貝茲曲線。 第一個控制點假設是前一個命令的第二個控制點在目前點另一邊的倒映。 如果沒有前一個命令,或者前一個命令不是三次方貝茲曲線命令或平滑三次方貝茲曲線命令,即假設第一個控制點和目前點是同一點。 而第二個控制點 (曲線結束處的控制點) 是由 controlPoint2 所指定。 例如,S 100,200 200,300 就是有效的平滑三次方貝茲曲線命令。
語法 |
---|
S controlPoint2 endPoint -或- s controlPoint2 endPoint |
詞彙 |
說明 |
---|---|
controlPoint2 |
曲線的控制點,決定了曲線的結束正切函數。 |
endPoint |
曲線要繪製到的點。 |
平滑二次方貝茲曲線命令
在目前點和指定的結束點之間建立一條二次方貝茲曲線。 控制點假設是前一個命令的控制點在目前點另一邊的倒映。 如果沒有前一個命令,或者前一個命令不是二次方貝茲曲線命令或平滑二次方貝茲曲線命令,即假設控制點和目前點是同一點。
語法 |
---|
T controlPoint endPoint -或- t controlPoint endPoint |
詞彙 |
說明 |
---|---|
controlPoint |
曲線的控制點,決定了曲線的起始點和正切函數。 |
endPoint |
曲線要繪製到的點。 |
橢圓弧線命令
在目前點和指定的結束點之間建立一條橢圓弧線。
語法 |
---|
A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint -或- a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint |
詞彙 |
說明 |
---|---|
size |
弧形的 X 半徑和 Y 半徑。 |
rotationAngle |
橢圓的旋轉角度 (以度為單位)。 |
isLargeArcFlag |
如果弧線的角度應該大於等於 180 度就設為 1,否則設為 0。 |
sweepDirectionFlag |
如果弧線是向正的角度方向繪製就設為 1,否則設為 0。 |
endPoint |
弧線要延伸到的點。 |
關閉命令
封閉目前圖形,並建立一條線連接目前點和圖形的起始點。 這個命令會在圖形的最後一個區段和第一個區段之間建立線條會合 (角)。
語法 |
---|
Z -或- z |
點的語法
描述一個點的 X 座標和 Y 座標。
語法 |
---|
x,y -或- x y |
詞彙 |
說明 |
---|---|
x |
點的 X 座標。 |
y |
點的 Y 座標。 |
特殊值
除了標準的數值外,還可以使用下列特殊值。 這些值必須區分大小寫。
Infinity
表示 Double.PositiveInfinity。-Infinity
表示 Double.NegativeInfinity。NaN
表示 Double.NaN。
您也可以使用科學記號表示法。 例如,+1.e17 就是有效值。