2012-01-04 51 views
4

好的,所以我知道如何將文本剪輯到特定的幾何圖形,但是文本不會基於剪輯自動換行,因此如何實現類似於下圖所示的效果,因爲您擁有「勾選「作爲幾何/路徑?跟隨/剪輯到形狀的文本?

這是手動添加適合每行的文本框,然後根據什麼/不適合分割文本的情況?

Example image

回答

1

我能想到的唯一辦法做到這一點是創建一個自定義的控制和覆蓋的OnRender。此自定義控件將具有一個幾何定義其剪輯區域和一個字符串類型的「文本」屬性。它也會有int類型的lineheight屬性。

在OnRender中,您可以測量要在當前X,Y位置繪製的文本(從剪輯幾何體的左上角開始)。每次測量此文本一個單詞並查看該單詞的邊界框是否爲可以使用Geometry的HitTest API,並測試該單詞的邊界矩形的所有四個點是否在幾何體內,如果是,則繪製該單詞,如果不是,則將X增加一個字母間距並再次測量,如果到達控制邊緣,將X重置爲零,然後將Y增加一個行間距,然後使用類似於電視機畫像素的Scanline方法重複此操作。

基本上你正在嘗試做什麼是創建自己的WrapPanel或TextBlock與文字環繞。如果你能我會調用在WPF框架上使用Reflector或ILSpy來查看WrapPanel/TextBlock中的代碼,或搜索文本「使用文本換行編碼自定義WrapPanel」/「TextBlock」/「RichTextControl」。它的任何想象力都不是一件容易的事情,但上述方法會給你所需要的一切。

最好的問候,

+0

謝謝,這肯定讓我在正確的方向一些指點,我也想知道如果我可以使用任何在使用的技術:http://msdn.microsoft.com/en -us/magazine/dd263097.aspx來幫助解決這個問題,但我不確定它在這種情況下特別有用。 – Siyfion 2012-01-04 10:35:31

+0

看起來很有趣!我認爲他在那裏做的是使用RenderTransforms(縮放,旋轉,平移)將文本的每個字母定位到路徑上?它不是一個香草WPF功能。也許你能從中得到什麼是如何獲得定義剪輯區域的路徑的座標,並確保文本被繪製在其中? – 2012-01-04 10:54:06