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

时间:2018-01-25 08:42:24

标签: c# .net wpf caret onkeyup

我需要获得放置多行Textbox的插入符号的点的确切坐标。

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

P.S。我希望这些坐标位于Textbox的KeyUp事件上,而不是Mouse事件上。

感谢。

2 个答案:

答案 0 :(得分:1)

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;
    }

答案 1 :(得分:0)

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

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

       //do something with the mouse position
    }

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

{{1}}

希望这有帮助

相关问题