Как мне разместить эллипс на сетке Silverlight? - PullRequest
3 голосов
/ 22 апреля 2009

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

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

  1. Отбрасывание маркера при клике точка.
  2. Создание эллипса и воспитание его к сетке.
  3. Создание и настройка AngleTransform на эллипсе.

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

  1. Расчет расстояния до точка первого клика.
  2. Установка ширины эллипса в эта длина.
  3. Расчет угла линии к точка щелчка и решетка X-Axis.
  4. Установка угла преобразования эллипса в этот угол.

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

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

Ответы [ 3 ]

2 голосов
/ 23 апреля 2009

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

  • Не используйте 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.

0 голосов
/ 19 мая 2009

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

0 голосов
/ 22 апреля 2009

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

...