我們這節主要介紹WPF常用畫圖標簽,由于WPF圖形處理設計大量篇幅?,我們在這里拋磚引玉,具體更多的學習資料鏈接https://github.com/microsoft/WPF-Samples/tree/master/Graphics? 該鏈接中微軟提供了大量的學習Demo,WPF圖形處理最大的區別在于WPF底層使用的DirectX,Winform底層使用的是GDI+,所以WPF的圖形界面上更勝一籌。
1. Line
該對象表示畫一條線,我們在學習幾何圖形的時候,大家都知道兩點可以確定一條線,所以我們畫一條直線只需要給出兩個坐標點可以
<Canvas><Line?X1="0"?Y1="0"?X2="300"?Y2="300"?StrokeThickness="2"?Stroke="Red">
</Canvas>
2.Rectangle
??? 可以用Rectangle畫矩形,RadiusX和RadiusY設置矩形角弧度
<Canvas><Rectangle Width="120" Height="100" RadiusX="5" RadiusY="5"Stroke="Green" StrokeThickness="2" Fill="Red"></Rectangle></Canvas>
3.Ellipse(畫橢圓)
<Canvas><Ellipse Height="200" Width="400" StrokeThickness="2" Stroke="Red" Fill="Gold"/>
</Canvas>
4.Path(表示幾何路徑)
該對象包含了一系列對象的組合,例如(直線,矩形,橢圓),Data屬性可以通過兩種方式來表示:
4.1 StreamGeometry方式
<Canvas><Path?Stroke="Black"?Fill="Gray"Data="M 10,100 C 10,300 300,-200 300,100" />
</Canvas>
我們來介紹一下Data中的指令:
1. 移動指令(Move Command):?指定圖形的起點,?M或m表示起始點,大寫絕對值,小寫相對值,例如:??M 10,100或m 10,100?是一個System.Windows.Point
2. 繪制命令(Draw Commands):繪制命令可以由幾個圖形命令組成,我們可以使用下面圖形命令:直線、水平線、豎線、三次貝塞爾曲線、二次貝塞爾曲線、平滑三次貝塞爾曲線、平滑二次貝塞爾曲線和橢圓弧
直線命令(Line Command):L endPoint或l endPoint表示結束點坐標,例如:l 20 30 and L 20,30?,endPoint表示一個System.Windows.Point類型
水平線命令(Horizontal Line Command):H x 或者 h x?當前點和指定的 x 坐標之間創建一條水平線,例如:H 90,x表示System.Double
豎線命令(Vertical Line Command):V y或者 v y ?在當前點和指定的 y 坐標之間創建一條豎線,例如:v 90?,y表示System.Double類型
三次貝塞爾曲線命令(Cubic Bezier Curve Command)?
語法如下:C? CP1??CP2??EP?或者 c? CP1??CP2??EP?
備注:CP=controlPoint,EP=endPoint
例如 :C ?10,300? 300,-200? 300,100? CP1 和CP2 ?和EP分別代表System.Windows.Point類型
二次貝塞爾曲線命令(Quadratic Bezier Curve Command):Q x,y x,y
語法如下:Q? CP??EP?或者 1? CP1??CP2??EP?
備注:CP=controlPoint,EP=endPoint
例如 :Q ?10,300? 300,100? ?CP和EP分別代表System.Windows.Point類型
平滑三次貝塞爾曲線命令(Smooth cubic Bezier curve Command):S x,y x,y
語法如下:S CP EP ?或者 s CP EP
備注:CP=controlPoint,EP=endPoint
例如 :S? 10,300? 300,100???CP和EP分別代表System.Windows.Point類型
平滑二次貝塞爾曲線命令(Smooth quadratic Bezier curve Command):
語法如下:T EP 或者 t EP
例如 :S? 10,300?? EP分別代表System.Windows.Point類型
橢圓弧命令(Elliptical Arc Command)
語法如下:A 或者a
參數?:??
size ?圓弧的 x 軸和 y 軸半徑
rotationAngle?橢圓的旋轉,以度為單位,System.Double類型
isLargeArcFlag 如果圓弧角度應為 180 度或更大請設置為 1,否則? ? 設置為 0
sweepDirectionFlag 如果以正角方向繪制圓弧,請設置為 1;否則設置為 0
endPoint是一個System.Windows.Point類型
3. 關閉指令(The Close Command):Z或者z , 結束當前圖形,用一條直線連接圖形的結束點和開始點
4.2 PathFigureCollection 方式
我們還引用剛才圖形
<Canvas><Path Stroke="Black" Fill="Gray"><Path.Data><PathGeometry Figures="M 10,100 C 10,300 300,-200 300,100" /></Path.Data></Path></Canvas>
示例:
<Path Stroke="Black" StrokeThickness="1"><Path.Data><PathGeometry><PathGeometry.Figures><PathFigureCollection><PathFigure IsClosed="True" StartPoint="10,100"><PathFigure.Segments><PathSegmentCollection><LineSegment Point="100,100" /><LineSegment Point="100,50" /></PathSegmentCollection></PathFigure.Segments></PathFigure></PathFigureCollection></PathGeometry.Figures></PathGeometry></Path.Data></Path>
我們可以看到這種方式對我們修改路徑特別方便,PathSegment 派生類如下:
System.Windows.Media.ArcSegment
System.Windows.Media.BezierSegment
System.Windows.Media.LineSegment
System.Windows.Media.PolyBezierSegment
System.Windows.Media.PolyLineSegment
System.Windows.Media.PolyQuadraticBezierSegment
System.Windows.Media.QuadraticBezierSegment
那我們怎么選擇這兩種方式呢? 在創建路徑后無需修改路徑時,請使用StreamGeometry;如果需要修改路徑,請使用?PathGeometry
5.Polygon
可以使用Polygon元素繪制閉合圖形。創建一個Polygon元素并使用其Points屬性指定形狀的頂點。將自動繪制一條連接第一個點和最后一個點的線。還可以指定?Fill?和/或?Stroke
<Canvas Height="300" Width="300"><Polygon Points="10,110 60,10 110,110" Fill="Blue" /><Polygon Points="10,110 60,10 110,110"Fill="Blue"Stroke="Black" StrokeThickness="4"Canvas.Top="150" /><Polygon Points="10,110 110,110 110,10"Fill="Blue"Canvas.Left="150" /><Polygon Points="10,110 110,110 110,10"Stroke="Black" StrokeThickness="4"Canvas.Left="150" Canvas.Top="150" /></Canvas>
6.Polyline
如果想繪制折線,我們可以創建?Polyline?元素并設置?Points?屬性指定形狀頂點。最后,使用?Stroke?和?StrokeThickness?屬性描述折線輪廓,Polyline?元素不是封閉形狀
<Canvas Height="400" Width="400"><PolylinePoints="10,110 60,10 110,110"Stroke="Black"StrokeThickness="4" /><PolylinePoints="10,110 110,110 110,10"Stroke="Black"StrokeThickness="4"Canvas.Left="150" /></Canvas>
這節我們主要介紹了常用圖形繪制對象Line,Rectangle,Ellipse,Path,Polygon,Polyline用法,可以看出WPF提供了強大的繪圖功能。希望對各位有所幫助,謝謝!