跟随/剪辑到文字的文字?

时间:2012-01-04 10:04:36

标签: c# wpf text textbox textblock

好的,所以我知道如何将文本剪辑到特定的几何体,但是文本不会根据剪辑自动换行,所以如何获得类似于下面所示的效果,假设你有“tick”作为几何/路径?

是否需要手动添加适合每一行的文本框,然后根据适合/不适合的内容分割文本?

Example image

1 个答案:

答案 0 :(得分:1)

我能想到的唯一方法是创建自定义控件并覆盖OnRender。此自定义控件将具有一个定义其剪辑区域的Geometry和一个string类型的“Text”属性。它还有一个int类型的lineheight属性。

在OnRender中,您可以测量要在当前X,Y位置绘制的文本(从剪辑几何体的左上角开始。一次测量一个单词,然后查看单词的边界框是否完全在夹子几何体内。这可以使用几何的HitTest API,并测试该单词的边界矩形的所有四个点都在几何体内。如果是,则绘制该单词,如果不是,则将X增加一个字母间距,再次测量。如果到达控件的边缘,将X重置为零并将Y增加一个行空间并使用类似于电视绘制其像素的扫描线方法重复。

基本上你要做的就是创建自己的WrapPanel或带有文本换行的TextBlock。如果可以的话,我可以在WPF框架上调用Reflector或ILSpy来查看WrapPanel / TextBlock中的代码,或者搜索带有文本环绕的“编写自定义WrapPanel”/“TextBlock”/“RichTextControl”的文章。任何想象力都不是一项容易的任务,但上述方法将为您提供所需的基本功能。

致以最诚挚的问候,