如何将TextBox中的X y位置转换为文本索引?

时间:2011-01-06 20:25:19

标签: wpf

我正在使用DragEventArgs作为Drop事件,并在TextBox中具有x,y Drop Insert位置。

如何在TextField中将x,y转换为索引? 我非常重要的是要找出这个信息!

非常感谢!

2 个答案:

答案 0 :(得分:3)

您需要使用TextBox的<{3}}方法:

void textBox1_Drop(object sender, DragEventArgs e)
{
    TextBox textBox = (TextBox)sender;
    Point position = e.GetPosition(textBox);
    int index = textBox.GetCharacterIndexFromPoint(position, true);
    string text = (string)e.Data.GetData(typeof(string));
    textBox.SelectionStart = index;
    textBox.SelectionLength = 0;
    textBox.SelectedText = text;
}

答案 1 :(得分:3)

这是一个小的增强,用于计算最接近滴点的字符的位置索引。 GetCharacterIndexFromPoint方法实际上并没有返回最接近字符的位置(就像它记录的那样),但是它返回了删除点下面的字符的索引(即使删除的点位于右边缘旁边) char的情况,在这种情况下,该方法应该返回下一个char的索引,该索引实际上更接近于丢弃点。)

private int GetRoundedCharacterIndexFromPoint(TextBox textBox, Point dropPoint)
{
    int position = textBox.GetCharacterIndexFromPoint(dropPoint, true);

    // Check if the dropped point is actually closer to the next character
    // or if it exceeds the righmost character in the textbox
    // (in this case increase position by 1)
    Rect charLeftEdge = textBox.GetRectFromCharacterIndex(position, false);
    Rect charRightEdge = textBox.GetRectFromCharacterIndex(position, true);
    double charWidth = charRightEdge.X - charLeftEdge.X;
    if (dropPoint.X + charWidth / 2 > charRightEdge.X) position++;

    return position;
}