Как расположить эллипс в сетке Silverlight?

Я создаю приложение Silverlight, которое позволит вам щелкнуть в двух местах на экране и нарисует эллипс, главная ось которого начинается и заканчивается в местах щелчка. Щелчковая область — это элемент управления Silverlight Grid. В настоящее время:

При первом нажатии я:

  1. Перетаскивание маркера в точке щелчка.
  2. Создание эллипса и привязка его к сетке.
  3. Создание и установка AngleTransform на эллипсе.

Когда вы двигаете мышью, я:

  1. Расчет расстояния до точки первого клика.
  2. Установка ширины эллипса на эту длину.
  3. Вычисление угла линии к точке щелчка и оси X сетки.
  4. Установка AngleTransform Angle Эллипса на этот угол.

Все идет нормально. Отображается эллипс, а его длина и угол поворота следуют за движением мыши.

Однако главная ось эллипса смещена от точки щелчка. Как расположить эллипс так, чтобы его главная ось начиналась с точки щелчка и заканчивалась в текущей позиции мыши?


person daviddennisei    schedule 21.04.2009    source источник


Ответы (3)


Ответ оказался таким:

  • Не используйте System.Windows.Shapes.Ellipse. Вместо этого используйте System.Windows.Shapes.Path и вставьте в него EllipseGeometry.

  • Также установите Path.RenderTransform на RotateTransform.

  • Не устанавливайте Width, Height или Stretch на Path. Вместо этого установите Center, RadiusX и RadiusY из EllipseGeometry.

  • Наконец, установите RotateTransform.Angle на угол пересечения большой оси Ellipse и оси X (ArcTan наклона большой оси). Также установите RotateTransform.CenterX и CenterY на EllipseGeometry Center.

person daviddennisei    schedule 22.04.2009

Если бы мне пришлось угадывать (помог бы код), я бы подумал, что вы могли бы добавить отступ от разницы начальной точки щелчка до левой стороны сетки, что должно помочь переместить ее на смещение.

person CodeMonkey1313    schedule 21.04.2009

Может быть хорошей идеей использовать Canvas вместо сетки для вашего приложения, тогда вы сможете напрямую настраивать координаты фигур.

person user109074    schedule 18.05.2009