在WPF中有沒有辦法可以修改任何路徑的繪製方式,從Dash-Dot
開始順序?假設我想爲繪製的任何路徑繪製一條三重線,或者繪製路徑上的小三角形,波......等等。我試過刷子,但不會遵循Path
。請幫助WPF Line,path ..etc自定義繪製樣式
thx
在WPF中有沒有辦法可以修改任何路徑的繪製方式,從Dash-Dot
開始順序?假設我想爲繪製的任何路徑繪製一條三重線,或者繪製路徑上的小三角形,波......等等。我試過刷子,但不會遵循Path
。請幫助WPF Line,path ..etc自定義繪製樣式
thx
在WPF中沒有支持的方法。解決方案將涉及複合路徑對象或花式代碼體操。你是否正在尋找一個三線路徑實現?
使用附加屬性來強制幾何圖形使得這相對容易。詳情請參閱我的回答。 – 2010-01-19 05:44:15
哇,這很酷。我從來沒有想過這樣做:)。 – jgraves 2010-01-20 01:08:28
WPF的Geometry
類擁有您需要的所有原語,但您需要在代碼中完成此操作。當我需要做自定義線條時,我通常會根據Geometry
構建一個Drawing
,但在您的情況下,您可以簡單地構建一個有三行並行和筆畫的Geometry
。
PathGeometry.CreateFromGeometry()
獲得PathGeometry
用於輸入路徑GetWidenedPathGeometry()
,傳遞所需的間隔,以得到一個新的幾何形狀,其邊緣對應於所述側線CombinedGeometry
有關步驟3的更多說明:加寬的幾何圖形在原始線的末端具有線段。這會在您的線條的末端繪製線條,在許多情況下實際上看起來美觀。如果沒有它,你的情況看起來會更好,通過迭代邊線幾何體並移除所有通過原始路徑端點的線段來刪除它。
上面的代碼大約需要8行代碼,如果你沒有敲出兩端,或者15如果你這樣做。
使這個方便的一個技巧是創建一個附屬屬性,它有效地強制它所附的Path
控件的Data
屬性。有了這樣的附加屬性,所有你需要寫的是:
<Path TripleStroke.Enable="true" Data="..." />
如果你知道如何實現附加屬性,並註冊在他們的處理程序,這是小菜一碟。如果不是,計劃花幾個小時學習如何在附加屬性方法實施之前編寫附加屬性以模擬價值強制。
更新
的基本技術我以上描述也可以被擴展,以允許沿着路徑待施加任意的圖案。有關示例,請參閱Expression Design工具中的自定義畫筆。然而,WPF並沒有爲你做到這一點,所以你需要自己創建它,我可以從經驗告訴你,這是很多工作。下面是基本步驟:
首先創建,需要一個Geometry
現有Drawing
的方法,以及一些參數端蓋等,並創建一個新的Drawing
該重複沿着由Geometry
給定的路徑在給定Drawing
。然後很容易繪製描邊路徑:創建一個Drawing
來描述自定義描邊,然後使用包含Binding
的DrawingVisual
來顯示描邊,並使用轉換器調用您的轉換方法。
實際實現的轉換方法:
GeometryDrawing
對象(我也支持ImageDrawing
但因爲你需要使用3D系統伸展的圖像,更復雜) 。這是通過遞歸通過DrawingGroup
對象完成的,隨時跟蹤轉換,並通過適當的轉換構造GeometryDrawings。GeometryDrawing
對象,並將適當的座標變換應用於幾何中的所有座標。還要注意,在步驟1,任何GlyphRunDrawings
使用FormattedText.BuildGeometry
創建等效GeometryDrawing
處理。
thx ..我需要類似adobe brush stroke的東西,在那裏你可以虛擬地沿着路徑應用模式......我現在在低級別做這件事,結果很好。 – Chandimal 2010-01-19 17:08:44
我在我的答案中添加了更多信息,描述瞭如何在Adobe中實現WPF中的任意自定義筆觸。我希望它有幫助。 – 2010-01-20 23:13:35
我沒有足夠的時間爲您研究正確的答案,但請看這篇文章:http://msdn.microsoft.com/en-us/magazine/cc337899.aspx,它可能會對你來說證明是非常有用的,而且我相信還有一條平行線路的實現。 – Egor 2009-10-29 07:48:54
嗨thx的評論,但我已經通過上述其複製現有的路徑,而不是一個單一的路徑與不同的刷子 – Chandimal 2009-10-29 08:33:00
可以使用http://blogs.msdn.com/b/mrochon/archive/2011/01 /10/custom-line-caps-in-wpf.aspx,然後畫一條較長的線作爲長度爲1的較小的連續線,或者使用您想要的自定義邊緣線 – 2015-08-28 22:40:20