WPF DocumentViewer - 通过GlyphRun获取ITextPointer,反之亦然

35
想知道是否有人尝试过攻击WPF DocumentViewer以使其更加有用。我已经花了将近一周的时间,试图基于使用反射提取的方法来创建这个控件的更强大的 API。
众所周知如何通过反射从文档查看器中获取选定的文本,但我的任务更加复杂。 选定的文本EndStart 属性,它们返回 ITextPointers。此外,我还使用这个代码提取了一组GlyphRuns。现在,我最终想知道哪个GlyphRun包含选择的起始位置。
因此,我想知道如何将 ITextPointers 转换为 GlyphRuns,反之亦然。我知道它们没有一对一的关系。这个带有封闭API的控件和上周花在Reflector上的时间让我睡不好觉。我希望之前有人尝试过或者看过代码示例,并能够指导我穿越这些丛林。

2
正如你所说,没有1:1的关系。此外,GlyphRun仅从object继承。但是,它确实包含值得注意的方法。(我还没有尝试过其中任何一个。)例如,GlyphRun.ComputeAlignmentBox()返回一个Rect,其中可能包含位置数据。我认为这就是关键...将GlyphRun和TextPointer的位置数据联系起来。 - Jake Berger
1
你能分享一些代码给我们吗,这样我们也可以尝试一下。 - HB MAAM
2
@HBMAAM,今年我找到了一个或多或少可行的解决方案,我会在这里发布,但需要一些时间。 - Snowbear
@Snowbear liaaar - Force444
1个回答

1
我建议您放弃这种方法。像这样大量进行私人反思并不是您应该基于生产代码的东西,它非常脆弱,在某些情况下甚至是被禁止的。坦白地说,您最好找到一个适合您需求的第三方控件,比如www.infragistics.com
或者,如果这不是一个选项,您可以在您必须花费的时间内创建自己的控件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接