如何从 WPF C# 中的 CaretIndex 获取坐标?

How to get coordinates from the CaretIndex in WPF C#?

我需要获取多行 Textbox 插入符号所在点的精确坐标。

假设我在Textbox中写一个新字符,那么坐标应该改变。

P.S。我想要 Textbox 的 KeyUp 事件上的这些坐标,而不是 Mouse 事件上的这些坐标。

谢谢。

在您的文本框/区域添加 KeyUp 事件:

<TextBox HorizontalAlignment="Left" Height="23" Margin="104,80,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" KeyUp="TextBox_KeyUp"/>

然后在事件处理程序上管理鼠标位置:

 private void TextBox_KeyUp(object sender, KeyEventArgs e)
    {
        Point myMouse = Mouse.GetPosition(this);

       //do something with the mouse position
    }

希望对您有所帮助

TextBox提供了获取文本任意位置字符边界的方法。如果传入CaretIndex,则矩形的左侧对应插入符号的左边缘。

var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);

然后您可以使用 rect.TopLeftrect.BottomLeft 来获取插入符号上端或下端的坐标。请注意,您将需要进行一些健全性检查。正确的实现看起来像这样:

    private Point? GetCaretPosition()
    {
        var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
        var location = rect.TopLeft /* or BottomLeft */;

        if (double.IsInfinity(location.X) || double.IsInfinity(location.Y))
            return null;

        return location;
    }