Я не делаю это в XAML, поскольку объекты буду генерировать во время выполнения.
Код: Выделить всё
Point origin, rotated;
origin.X = center.X;
origin.Y = center.Y + radius;
rotated.X = (Math.Cos(angle * Math.PI / 180) * (origin.X - center.X) - Math.Sin(angle * Math.PI / 180) * (origin.Y - center.Y) + center.X);
rotated.Y = (Math.Sin(angle * Math.PI / 180) * (origin.X - center.X) + Math.Cos(angle * Math.PI / 180) * (origin.Y - center.Y) + center.Y);
TranslateTransform translateTransf = new TranslateTransform() { X = rotated.X, Y = rotated.Y };
textBlock.RenderTransform = translateTransf;
plotCanvas.Children.Add(textBlock);

А затем в другом событии я применяю вращение к объектам на холсте, при этом абсолютные значения холста передаются в CenterX и CenterY, чтобы определить центр всех вращений.
Код: Выделить всё
RotateTransform rotateTransf = new RotateTransform(angleRotation) { CenterX = plotCanvas.ActualHeight / 2, CenterY = plotCanvas.ActualWidth / 2 };
foreach (TextBlock childBlock in plotCanvas.Children.OfType())
childBlock.RenderTransform = rotateTransf;
// Other objects are rotated fine around the canvas center
И обратите внимание, что к (сгруппированным) применяется «вторичное вращение». текст, хотя я ожидал, что он останется горизонтальным, а затем применил еще один поворот, чтобы он указывал на центр холста.

Что я делаю неправильно или упускаю, чтобы «сохранить «начальное преобразование непосредственно перед вращением (или преобразованием накопления), и почему происходит это «вторичное вращение»?
Подробнее здесь: https://stackoverflow.com/questions/784 ... m-to-a-wpf
Мобильная версия