【问题标题】:Text that follows / clips to a shape?跟随/剪辑到形状的文本?
【发布时间】:2012-01-04 10:04:36
【问题描述】:

好的,所以我知道如何将文本剪辑到特定的几何图形,但是文本不会根据剪辑自动换行,所以如果你有“打勾”作为几何/路径?

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

【问题讨论】:

    标签: c# wpf text textbox textblock


    【解决方案1】:

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

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

    基本上你想要做的是创建你自己的 WrapPanel 或 TextBlock 与文本换行。如果可以的话,我会在 WPF 框架上调用 Reflector 或 ILSpy 以查看 WrapPanel / TextBlock 中的代码,或者搜索关于“编码自定义 WrapPanel”/“TextBlock”/“RichTextControl”的文章以及文本换行。无论如何,这都不是一件容易的事,但上述方法将为您提供所需的基本信息。

    最好的问候,

    【讨论】:

    • 谢谢,这肯定给了我一些正确方向的指示,我也想知道我是否可以使用msdn.microsoft.com/en-us/magazine/dd263097.aspx 中使用的任何技术来帮助解决这个问题,虽然我不是确定它在这种情况下特别有用。
    • 这看起来很有趣!我认为他在那里做的是使用 RenderTransforms(缩放、旋转、翻译)将每个文本字母定位到路径?它不是普通的 WPF 功能。也许您可以从中获得的是如何获取定义剪辑区域的路径坐标并确保在其中绘制文本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多