Hier ist eine kleine Erweiterung, die die Position Index eines Zeichens berechnet, das am nächsten an den Tropfpunkt ist. Die Methode GetCharacterIndexFromPoint gibt tatsächlich nicht die Position des nächsten Chars zurück (wie es dokumentiert ist), sondern gibt den Index des Zeichens zurück, das sich unter dem Drop-Point befindet (auch wenn der Drop-Point direkt neben der rechten Kante des Chars liegt). In diesem Fall sollte die Methode den Index des nächsten Zeichens zurückgeben, das tatsächlich näher am Abwurfpunkt liegt.
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;
}
Zur Klarstellung: Beabsichtigen Sie, dass Sie zum Beispiel die Zeichenfolge hatte '„California“' in einem Text, wenn und fiel etwas zwischen dem '‚i'' und der '‘ f'', dass es das Objekt in Index 4 des Textfelds einfügen würde? –
Ich verwende einen PreviewDrop und möchte den alten Text mit dem versuchten Drop-Text an den richtigen Stellen zusammenstellen. Ja, das ist richtig. Ich werde den Wert nicht selbst setzen, ich werde entweder DragEventArgs.Handled auf true setzen oder nicht – user565660