2009-10-29 82 views
4

在WPF中有沒有辦法可以修改任何路徑的繪製方式,從Dash-Dot開始順序?假設我想爲繪製的任何路徑繪製一條三重線,或者繪製路徑上的小三角形,波......等等。我試過刷子,但不會遵循Path。請幫助WPF Line,path ..etc自定義繪製樣式

thx

+1

我沒有足夠的時間爲您研究正確的答案,但請看這篇文章:http://msdn.microsoft.com/en-us/magazine/cc337899.aspx,它可能會對你來說證明是非常有用的,而且我相信還有一條平行線路的實現。 – Egor 2009-10-29 07:48:54

+0

嗨thx的評論,但我已經通過上述其複製現有的路徑,而不是一個單一的路徑與不同的刷子 – Chandimal 2009-10-29 08:33:00

+0

可以使用http://blogs.msdn.com/b/mrochon/archive/2011/01 /10/custom-line-caps-in-wpf.aspx,然後畫一條較長的線作爲長度爲1的較小的連續線,或者使用您想要的自定義邊緣線 – 2015-08-28 22:40:20

回答

0

在WPF中沒有支持的方法。解決方案將涉及複合路徑對象或花式代碼體操。你是否正在尋找一個三線路徑實現?

+0

使用附加屬性來強制幾何圖形使得這相對容易。詳情請參閱我的回答。 – 2010-01-19 05:44:15

+0

哇,這很酷。我從來沒有想過這樣做:)。 – jgraves 2010-01-20 01:08:28

3

WPF的Geometry類擁有您需要的所有原語,但您需要在代碼中完成此操作。當我需要做自定義線條時,我通常會根據Geometry構建一個Drawing,但在您的情況下,您可以簡單地構建一個有三行並行和筆畫的Geometry

  1. 開始與PathGeometry.CreateFromGeometry()獲得PathGeometry用於輸入路徑
  2. 使用GetWidenedPathGeometry(),傳遞所需的間隔,以得到一個新的幾何形狀,其邊緣對應於所述側線
  3. (可選)在刪除區段加寬幾何的端部,如果需要的話
  4. 使用CombinedGeometry
  5. 中風組合幾何形狀獲得三重線合併側線geomerty與初始幾何圖形

有關步驟3的更多說明:加寬的幾何圖形在原始線的末端具有線段。這會在您的線條的末端繪製線條,在許多情況下實際上看起來美觀。如果沒有它,你的情況看起來會更好,通過迭代邊線幾何體並移除所有通過原始路徑端點的線段來刪除它。

上面的代碼大約需要8行代碼,如果你沒有敲出兩端,或者15如果你這樣做。

使這個方便的一個技巧是創建一個附屬屬性,它有效地強制它所附的Path控件的Data屬性。有了這樣的附加屬性,所有你需要寫的是:

<Path TripleStroke.Enable="true" Data="..." /> 

如果你知道如何實現附加屬性,並註冊在他們的處理程序,這是小菜一碟。如果不是,計劃花幾個小時學習如何在附加屬性方法實施之前編寫附加屬性以模擬價值強制。

更新

的基本技術我以上描述也可以被擴展,以允許沿着路徑待施加任意的圖案。有關示例,請參閱Expression Design工具中的自定義畫筆。然而,WPF並沒有爲你做到這一點,所以你需要自己創建它,我可以從經驗告訴你,這是很多工作。下面是基本步驟:

首先創建,需要一個Geometry現有Drawing的方法,以及一些參數端蓋等,並創建一個新的Drawing該重複沿着由Geometry給定的路徑在給定Drawing。然後很容易繪製描邊路徑:創建一個Drawing來描述自定義描邊,然後使用包含BindingDrawingVisual來顯示描邊,並使用轉換器調用您的轉換方法。

實際實現的轉換方法:

  1. 轉換的源繪製成一組GeometryDrawing對象(我也支持ImageDrawing但因爲你需要使用3D系統伸展的圖像,更復雜) 。這是通過遞歸通過DrawingGroup對象完成的,隨時跟蹤轉換,並通過適當的轉換構造GeometryDrawings。
  2. 刪除原始圖紙「端蓋」區域中的幾何圖形部分,並將它們放在一邊。
  3. 沿路徑迭代,重複複製GeometryDrawing對象,並將適當的座標變換應用於幾何中的所有座標。
  4. 使用相同的步驟處理幾何體的「端蓋」部分。

還要注意,在步驟1,任何GlyphRunDrawings使用FormattedText.BuildGeometry創建等效GeometryDrawing處理。

+0

thx ..我需要類似adobe brush stroke的東西,在那裏你可以虛擬地沿着路徑應用模式......我現在在低級別做這件事,結果很好。 – Chandimal 2010-01-19 17:08:44

+0

我在我的答案中添加了更多信息,描述瞭如何在Adobe中實現WPF中的任意自定義筆觸。我希望它有幫助。 – 2010-01-20 23:13:35