Ваш вопрос сбивает с толку ... вы хотите повернуть 2D-объект в плоскости экрана, верно? (Это то, что я предположил из вашей трансформации.) Так почему вы используете обе позиции мыши x и y? Ваше вращение является скалярным значением, поэтому вы должны просто использовать одну ось движения мыши.
Если вы вместо этого хотите повернуть свой объект, удерживая мышкой воображаемое кольцо вокруг объекта и поворачивая его ... тогда вам следует вместо этого сохранять ссылку на начальную позицию относительно центра объекта или начального угла мышь относительно центра объекта. Может быть, что-то вроде этого:
private void Manipulator_OnManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
if (e.Position.X > ContainerGrid.Width - RotateRectangle.Width &&
e.Position.Y < ContainerGrid.Height - RotateRectangle.Height)
{
_isRotating = true;
var startingRadians = Math.Atan2((currentLocation.Y - objectCenter.Y), (currentLocation.X - objectCenter.X));
startingAngle = startingRadians * 180 / Math.PI;
return;
}
_isRotating = false;
}
private void Manipulator_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (_isRotating)
{
Point currentLocation = e.Position;
double radians = Math.Atan2((currentLocation.Y - objectCenter.Y), (currentLocation.X - objectCenter.X));
var angle = radians * 180 / Math.PI;
RotateGrid.Angle = angle-startingAngle;
}
}