2

这是一个稍微抽象的问题,对此我深表歉意。我不一定要寻找经过测试的特定解决方案,而是可以尝试一些建议以找到最有效的解决方案。欢迎所有建议 - 越多样化和创造性越好。

这是问题所在:

我有一个TextBlock包含一段环绕文本的 Silverlight。它可能包含应用了多种格式的多次运行,包括多种字体大小。它可以左对齐、右对齐、居中对齐或对齐,并且可能包含使用从右到左文本流的运行。我需要能够检测到鼠标指针下的字符。在 WPF 中,我可以使用该方法轻松解决此问题GetPositionFromPoint,但由于 Silverlight 中不存在此方法,因此我需要一个创造性的解决方法。

我尝试过的一种方法取得了相当大的成功,是将文本分解成单个单词并TextBlock为每个单词创建一个。通过将它们呈现在 a 中,WrapPanel我可以识别每个单词的起始位置,从而缩小命中测试区域。找到实际的目标字符就是逐个字符地构建目标单词,直到它的宽度满足鼠标位置。

虽然我的实验技术有效,但它有两个缺点。首先是性能,因为TextBlockWrapPanel. 第二个问题是我的换行算法(粗略地基于空格和连字符)可能TextBlock与 UI 中使用的实际使用的算法不完全匹配。刚刚阅读了Unicode Line Breaking Algorithm,我意识到这本身就是一个完整的主题。我不想冒在某些段落内容条件下破坏设计的风险

理想情况下,我希望找到一种可以让我直接针对 main 进行测量的技术TextBlock,但我欢迎任何创新的建议,无论它们看起来多么奇怪。

非常感谢,蒂姆

4

1 回答 1

2

改用 a RichTextBox,那确实有一个GetPositionFromPoint方法。

于 2010-09-17T08:54:24.750 回答