好的,所以我知道如何将文本剪裁成特定的几何形状,但是文本不会根据剪裁自动换行,那么如果您有“勾选”作为几何/路径?
是否需要手动添加适合每一行的文本框,然后根据适合/不适合的内容拆分文本?
最佳答案
我能想到的唯一方法是创建自定义控件并覆盖 OnRender。这个自定义控件将有一个定义其剪辑区域的几何图形和一个字符串类型的“文本”属性。它还将具有 int 类型的 lineheight 属性。
在 OnRender 中,您可以测量将要在当前 X、Y 位置绘制的文本(从剪辑几何图形的左上角开始。一次一个单词地测量此文本,并查看单词的边界框是否完全在剪辑几何内。这可以使用几何的 HitTest API,并测试单词边界矩形的所有四个点是否在几何内。如果是,则绘制该单词,如果不是,则将 X 增加一个字母间距,然后再次测量。如果您到达控件的边缘,请将 X 重置为零并将 Y 增加一个行间距并重复,使用类似于电视绘制像素的方式的扫描线方法。
基本上您要做的是创建您自己的带有文本换行的 WrapPanel 或 TextBlock。如果可以的话,我会在 WPF 框架上调用 Reflector 或 ILSpy 来查看 WrapPanel/TextBlock 中的代码,或者搜索有关“使用文本换行编写自定义 WrapPanel”/“TextBlock”/“RichTextControl”的文章。任何想象力都不是一件容易的事,但上述方法将为您提供所需的基本信息。
最好的问候,
关于c# - 跟随/剪辑到形状的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725002/