2012-01-04 49 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