【发布时间】:2012-01-04 10:04:36
【问题描述】:
好的,所以我知道如何将文本剪辑到特定的几何图形,但是文本不会根据剪辑自动换行,所以如果你有“打勾”作为几何/路径?
是否需要手动添加适合每一行的文本框,然后根据将/不适合的内容拆分文本?
【问题讨论】:
标签: c# wpf text textbox textblock
好的,所以我知道如何将文本剪辑到特定的几何图形,但是文本不会根据剪辑自动换行,所以如果你有“打勾”作为几何/路径?
是否需要手动添加适合每一行的文本框,然后根据将/不适合的内容拆分文本?
【问题讨论】:
标签: c# wpf text textbox textblock
我能想到的唯一方法是创建一个自定义控件并覆盖 OnRender。此自定义控件将具有定义其剪辑区域的 Geometry 和字符串类型的“文本”属性。它还将具有 int 类型的 lineheight 属性。
在 OnRender 中,您可以测量要在当前 X、Y 位置绘制的文本(从剪辑几何图形的左上角开始。一次测量一个单词,看看该单词的边界框是否完全在剪辑几何体中。这可以使用几何体的 HitTest API,并测试单词边界矩形的所有四个点是否都在几何体中。如果是,则绘制该单词,如果不是,则将 X 增加一个字母间距,然后再次测量。如果到达控件的边缘,请将 X 重置为零并将 Y 增加一个行距并重复,使用类似于电视绘制像素的扫描线方法。
基本上你想要做的是创建你自己的 WrapPanel 或 TextBlock 与文本换行。如果可以的话,我会在 WPF 框架上调用 Reflector 或 ILSpy 以查看 WrapPanel / TextBlock 中的代码,或者搜索关于“编码自定义 WrapPanel”/“TextBlock”/“RichTextControl”的文章以及文本换行。无论如何,这都不是一件容易的事,但上述方法将为您提供所需的基本信息。
最好的问候,
【讨论】: