В C# можно узнать координаты объекта на Canvas с использованием свойства RenderTransformOrigin и метода TransformToAncestor. Если якоря не находятся в центре объекта, то нужно сначала определить позицию якоря относительно самого объекта, а затем его преобразовать в координаты Canvas.
Вот пример кода, который поможет вам получить координаты объекта на Canvas:
// Получение координат объекта на Canvas private Point GetCanvasCoordinates(FrameworkElement element) { // Получение позиции якоря объекта относительно самого элемента Point anchorPoint = new Point(element.ActualWidth * element.RenderTransformOrigin.X, element.ActualHeight * element.RenderTransformOrigin.Y); // Преобразование позиции якоря в координаты Canvas GeneralTransform transform = element.TransformToAncestor(canvas); Point canvasCoordinates = transform.TransformPoint(anchorPoint); return canvasCoordinates; }
В этом коде мы сначала определяем позицию якоря объекта относительно самого объекта. Для этого мы умножаем ширину и высоту объекта на значения свойства RenderTransformOrigin, которые указывают на позицию якоря относительно размеров объекта (от 0 до 1).
Затем мы используем метод TransformToAncestor, чтобы преобразовать координаты якоря объекта в координаты Canvas. Метод TransformToAncestor требует ссылки на Canvas (canvas в данном случае) в качестве параметра.
В конце мы возвращаем полученные координаты объекта на Canvas.
Вы можете вызвать этот метод, передавая в него объект, для которого вы хотите получить координаты на Canvas:
Point coordinates = GetCanvasCoordinates(myObject); double x = coordinates.X; double y = coordinates.Y;
Теперь вы знаете, как получить координаты объекта на Canvas, даже если якоря не находятся в центре.