跟随/裁剪形状的文本?

6

我知道如何将文本剪切到特定的几何形状,但是文本不会根据裁剪区域自动换行,那么如果您有一个“勾”作为几何形状/路径,该怎么实现像下面展示的效果呢?

是否需要手动添加适合每一行的文本框,并根据能否容纳来分割文本?

示例图片

1个回答

1
我能想到的唯一方法是创建一个自定义控件并覆盖OnRender。这个自定义控件将具有定义其剪辑区域的几何形状和一个类型为字符串的“文本”属性。它还将具有一个类型为int的行高属性。
在OnRender中,您可以测量即将在当前X、Y位置绘制的文本(从剪辑几何形状的左上角开始)。逐个单词地测量此文本,并查看单词的边界框是否完全位于剪辑几何形状内。这可以使用Geometry的HitTest API实现,并测试单词的边界矩形的所有四个点是否都在几何形状内。如果是,则绘制该单词;如果不是,则将X增加一个字母间距并重新测量。如果达到控件的边缘,请将X重置为零并将Y增加一个行间距并重复,使用类似电视绘制像素的扫描线方法。

基本上你想要做的是创建自己的WrapPanel或TextBlock,实现文本换行。如果可以的话,我建议你使用Reflector或ILSpy来查看WPF Framework中WrapPanel / TextBlock的代码,或者搜索关于“编写自定义WrapPanel”/“TextBlock”/“RichTextControl”的文章,以实现文本换行。这不是一项容易的任务,但以上方法将为您提供所需的基础。

最好的问候,


谢谢,这确实给了我一些正确方向的指引。我也在想是否可以使用http://msdn.microsoft.com/en-us/magazine/dd263097.aspx中使用的任何技术来帮助解决这个问题,尽管我不确定它在这种情况下是否特别有用。 - Siyfion
看起来很有趣!我觉得他在那里使用RenderTransforms(缩放、旋转、移动)将每个字母的文本定位到一个路径上?这不是标准的WPF特性。也许你可以从中学到如何获取定义剪切区域的路径的坐标,并确保文本在其中绘制? - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接