Проблема в том, что вы всегда вычисляете дельту до начальной начальной точки. Вы должны актуализировать startPoint после каждого вызова txtBox_ PreviewMouseMove
. Что-то вроде ...
private void txtBox_PreviewMouseMove(object sender, RoutedEventArgs e) {
Point mousePos = Mouse.GetPosition(parentCanvas);
if (isClicked){
foreach (TextBox item in items) {
double left = Canvas.GetLeft(item);
double top = Canvas.GetTop(item);
Canvas.SetLeft(item, left + (startPoint.X - mousePos.X));
Canvas.SetTop(item, top + (startPoint.Y - mousePos.Y));
}
startPoint=mousePoint;
}
}
... должен сделать работу. Еще одна вещь, которую я видел, это то, что направление, вероятно, перевернуто. Это можно легко исправить. Изменить калькуляцию на ...
Canvas.SetLeft(item, left + (mousePos.X-startPoint.X ));
Canvas.SetTop(item, top + (mousePos.Y-startPoint.Y));
... и эта проблема также должна исчезнуть.