Для того чтобы узнать реальные координаты повернутого на угол объекта, написал функцию GetRealPointХХХ(). Но, как выяснилось позже, для этих же целей можно использовать стандартную TranslatePoint, но возникла проблема.
| Код | Point pointTopLeftCorner = _canvasItem.GetRealPointTopLeftQuad( new Point((double)_canvasItem.GetValue(Canvas.LeftProperty), (double)_canvasItem.GetValue(Canvas.TopProperty)));
var canvas = VisualTreeHelper.GetParent(_canvasItem) as Canvas; if (canvas != null) pointTopLeftCorner = _canvasItem.TranslatePoint(new Point(0, 0), canvas);
_canvasItem.RenderTransformOrigin = new Point( (Margin.Left + Width / 2.0)/_canvasItem.ActualWidth, (Margin.Top + Height / 2.0)/_canvasItem.ActualHeight);
Point pointTopLeftCornerAfter1 = _canvasItem.GetRealPointTopLeftQuad( new Point((double)_canvasItem.GetValue(Canvas.LeftProperty), (double)_canvasItem.GetValue(Canvas.TopProperty)));
Point pointTopLeftCornerAfter2; if (canvas != null) pointTopLeftCornerAfter2 = _canvasItem.TranslatePoint(new Point(0, 0), canvas);
|
После изменения RenderTransformOrigin повернутого объекта, его координаты изменяются. При этом моя функция правильно считает новые координаты ( присваиваются в pointTopLeftCornerAfter1), а TranslatePoint упорно возвращает старые координаты, хотя при следующем вызове функции и до трансформации вновь правильно. Пытался вызывать функции InvalidateArrange(), InvalidateMeasure(), InvalidateVisual() для канваса и объекта после изменения RenderTransformOrigin, но ничего не помогло. В чем проблема? |