Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从WPF C#中的CaretIndex获取坐标?_C#_.net_Wpf_Caret_Onkeyup - Fatal编程技术网

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

如何从WPF C#中的CaretIndex获取坐标?,c#,.net,wpf,caret,onkeyup,C#,.net,Wpf,Caret,Onkeyup,我需要得到多行文本框插入符号所在点的精确坐标 假设我正在文本框中写入一个新字符,那么坐标应该更改 另外,我希望这些坐标出现在文本框的键控事件上,而不是出现在鼠标事件上 谢谢。在文本框/区域中添加一个键控事件: <TextBox HorizontalAlignment="Left" Height="23" Margin="104,80,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" Key

我需要得到多行
文本框插入符号所在点的精确坐标

假设我正在
文本框中写入一个新字符,那么坐标应该更改

另外,我希望这些坐标出现在
文本框
的键控事件上,而不是出现在
鼠标
事件上


谢谢。

在文本框/区域中添加一个键控事件:

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

希望这有助于

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

var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
然后,可以使用
rect.TopLeft
rect.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;
    }

创建鼠标位置。没有得到那么多,你能更深入地解释一下吗。ThanksMousePosition mousePosition=new mousePosition()?无法获得类似于mousePosition的内容,朋友。我想你从未尝试过做任何事情。这会告诉你鼠标光标在哪里,但不会告诉你文本插入符号在哪里。尝试一下,会让你知道。@BhavikJadav我不确定你使用了什么技术,但是如果您没有使用
GetRectFromCharacterIndex
,那么您应该会看到我的答案。那将是“正确”的方法。好极了,我刚刚用了它,它';It’行了,顺便说一句,我用了右下角的坐标。为WPF干杯。
    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;
    }