首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 圖形繪製詳解:從基礎形狀到複雜路徑

     編輯:關於.NET

WPF 圖形系統概覽

在 WPF 中,圖形不僅僅是繪圖指令,而是實實在在的 UI 樹元素。所有形狀類別都繼承自抽象基類 Shape,這意味著它們共享一組通用屬性,如 Fill(內部填充)、Stroke(輪廓筆刷)以及筆觸相關屬性(StrokeThickness、StrokeDashArray 等)。若未設定 Fill 或 Stroke,形狀將不可見,因為預設皆為透明。

值得一提的是,Stroke 採用 Brush 而非 Pen 類型,主要是為了標記便利性;WPF 內部仍使用 Pen 繪製邊框,所有筆觸樣式透過獨立屬性暴露,避免了單純為設定顏色而需定義完整 Pen 的繁瑣。

基本形狀元素

矩形

Rectangle 不具備自身定位屬性,完全依賴父面板(如 Canvas、Grid)進行佈局。可透過 RadiusX、RadiusY 繪製圓角矩形,亦可配合 RenderTransform 實現相對容器的旋轉。

矩形示例
旋轉矩形
圓角矩形

橢圓

Ellipse 與 Rectangle 用法幾乎相同,差別僅在於繪製橢圓而非矩形,大小、位置、填充與邊框控制方式一致。

橢圓示例

直線與折線

Line 由 X1,Y1,X2,Y2 定義端點,座標相對於父面板配置區域。Polyline 則透過 Points 屬性串連多個點,繪製開放的連續線段。

直線示例
折線示例

多邊形與填充規則

Polygon 與 Polyline 相似,但會自動閉合首尾端點並支援 Fill。對於自相交形狀,WPF 提供 FillRule 屬性:

  • EvenOdd(預設):射線與邊界交點為奇數視為內部。
  • Nonzero:考慮邊界方向,累計非零則為內部,適合複雜路徑組合。
填充規則比較
Nonzero 規則範例

路徑:最強大的形狀

Path 透過 Data 屬性(型別 Geometry)描述任意複雜幾何。除基本 RectangleGeometry、EllipseGeometry、LineGeometry 外,核心在於 PathGeometry 与 GeometryGroup。

幾何群組與布林運算

將多個幾何放入 GeometryGroup 可形成單一形狀,預設 EvenOdd 規則會在重疊處產生「洞」。若需更精確的布林運算(聯集、交集、差集等),可使用 CombinedGeometry 並設定 CombineMode(Union、Intersect、Xor、Exclude、Complement)。

兩個獨立橢圓
GeometryGroup 產生中空
CombinedGeometry 模式

PathGeometry 與段落類型

PathGeometry 由一或多個 PathFigure 組成,每個圖形以 StartSegment 起始,經由 LineSegment、ArcSegment、BezierSegment 等段落描繪輪廓,以 CloseSegment 閉合。貝茲曲線(三次/二次)提供極大彈性,PolyBezierSegment 可一次定義多條曲線。

貝茲曲線示例
控制點影響
控制點距離影響

橢圓弧段詳細說明

ArcSegment 需指定終點、橢圓半徑(Size)、旋轉角度(Rotation)、LargeArc(大/小弧)、SweepFlag(順/逆時針)。四種組合可繪製同一橢圓上的不同弧段。

橢圓切割方式
四種弧段結果
旋轉橢圓軸

Path 標記簡寫語法

Path.Data 支援字串簡寫,大幅減少 XAML 噪音。命令包含:M(Move)、L(Line)、H/V(水平/垂直線)、C/S(三次貝茲)、Q(二次貝茲)、A(橢圓弧)、Z(閉合)。大寫為絕對座標,小寫為相對座標。

<Path Fill="Cyan" Stroke="Black" Data="M 0,0 L 50,0 50,50 0,50 Z" />
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved