我使用FormattedText呈现文本,但似乎确实有任何方法可以在呈现的输出上执行按字符命中测试。它是只读的,所以我基本上只需要选择,不需要编辑。
我会使用RichTextBox或类似的代码,但我需要根据文本本身中嵌入的控制代码来输出文本,这样它们就不会总是嵌套,这使得构建正确的内联元素非常复杂。我还有点担心该解决方案的性能;我有大量的行,并且经常附加新行。
我看过GlyphRun,似乎我可以从它或相关的类中获得命中测试,但我会重新实现许多功能,似乎应该有一个更简单的方法……
有没有人知道实现这一点的好方法?
发布于 2011-07-27 13:31:27
您可以从FormattedText对象中获取每个字符的几何体,并使用每个字符的边界来执行命中测试。
var geometry = (GeometryGroup)((GeometryGroup)text.BuildGeometry(new Point(0, 0))).Children[0];
foreach (var c in geometry.Children)
{
if (c.Bounds.Contains(point))
return index;
index++;
}在OnRender中,可以渲染这些几何体对象,而不是格式化文本。
https://stackoverflow.com/questions/540002
复制相似问题