gpt4 book ai didi

c# - Wpf Richtextbox 某个文本的位置

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:18 26 4
gpt4 key购买 nike

我正在编写带有标记的滚动条(如 Visual Studio),并且我希望能够在我为富文本框执行查找 (Ctrl+F) 时添加标记。我的用户控件是一个带有 contentPresenter 的 scrollViewer,然后在我的窗口中将我的内容放在 contentPresenter 中。

现在,我可以用 this code 找到我想要的所有模式.但是现在,我想在我的滚动条上添加一个标记。

我放置标记的算法是基于我要标记的元素的位置。所以我想从 richtextbox 或其父项的顶部获取位置(在我的例子中它是一个 contentPresnter)。

一开始,我努力获取我的字符串的行,但我不能,因为它是一个丰富的文本框,一行可以有 48 号字体,接下来的 12 号。

解决方案

我最终想到了 Furkle 的一个想法。我使用 RichTextBox.CaretPosition.GetCharacterRect(...) 获取 Rect 的 Y 和 Height 属性。

最佳答案

我认为有两种基本方法可以做到这一点:

  1. 创建一个扩展 RichTextBox 功能的自定义控件。 MSDN 上有关于扩展 WPF 控件的文档:http://msdn.microsoft.com/en-us/library/cc295235.aspx

  2. 使用第二个单独的控件,大约为滚动条的宽度和整个 RichTextBox 的高度。为该控件提供透明背景并将其置于比 RichTextBox 更高的 z 顺序中,您将能够在 RichTextBox 之上绘制。在我的想象中,这与您在 #1 中扩展 RichTextBox 的方式基本相同。不过请记住两件事 - 您必须确保矩形和它们所在的控件不是 HitTestVisible,否则您将无法使用滚动条。

也有可能这是我完全不知道的内置函数,但我以前从未遇到过。

为了获得像素位置,您可以使用的一个函数是 CaretPosition.GetCharacterRect(): https://social.msdn.microsoft.com/Forums/vstudio/en-US/af780cd9-a4d5-4ab0-850d-c1e98a0d0046/how-to-get-x-y-corordicates-of-caret-in-richtextbox-when-caret-is-at-the-end-of-the-wrapped-line?forum=wpf .在 RichTextBox 中移动以查找匹配的短语时,您可以将插入符号设置在该位置,保存您找到的所有位置并存储它以供以后在绘制矩形时使用。

关于c# - Wpf Richtextbox 某个文本的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com