如何从 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.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;
}
我需要获取多行 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.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;
}