c# - 跟随/剪辑到形状的文本?

标签 c# wpf text textbox textblock

好的,所以我知道如何将文本剪裁成特定的几何形状,但是文本不会根据剪裁自动换行,那么如果您有“勾选”作为几何/路径?

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

Example image

最佳答案

我能想到的唯一方法是创建自定义控件并覆盖 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/

相关文章:

c# - 如何使用 openxml 在 Powerpoint 上更新不同的嵌入图表?

wpf - 使用 Treeview HierarchicalDataTemplate.Triggers 更改文件夹图标

c# - 根据条件以编程方式更改 ImageBrush 图像源 (WPF)

c# - wpf为按钮默认样式添加样式属性

html - 相对于静态背景图像位置的 CSS 位置文本

c# - 在选择期间更改一列的值 - Linq to Sql

C# 如何在继续之前等待网页完成加载

c# - 什么调用和区分 "It", "Because"和 "Establish"

python - 处理速度 - 编辑大型 2GB 文本文件 python

java - 使用扫描仪类更改文本文件中的特定文本(java)