WPF: как мне сделать редактируемый путь - PullRequest
4 голосов
/ 10 марта 2011

Мне было интересно, может ли кто-нибудь помочь мне решить эту проблему:

Мне нужно создать путь, щелкнув несколько точек на холсте, и эти точки будут добавлены в геометрию пути.После завершения пути пользователь может «скользить» или перемещать управляющие вершины (якоря) пути, чтобы настроить форму пути.

Я выяснил, как нарисовать путь в стиле «лассо»,но как мне разрешить пользователю выбирать и перемещать одну точку в пути ???

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Вам потребуется разработать структуру данных для хранения точечных данных, чтобы их можно было легко запрашивать и манипулировать ими.Объект Path может быть достаточным для этого самого, но подумайте над тем, чтобы обернуть его другим объектом, чтобы представить более специфичный для домена интерфейс.

Вам придется обнаруживать события мыши в Canvas и проверять попадание для всех вершинв пути.

Тест удара - это функция, которая дает вам ссылку на одну точку на пути, ближайшем к координате мыши, или null, если щелчок был слишком далеко от любой из точек, чтобы считаться"удар".Ваша функция проверки попадания становится низкоуровневой конструкцией, из которой вы можете построить более интересные операции редактирования.

Например, вы можете сохранить bool для каждой точки пути, указывающей, выбрана ли эта точка.При перетаскивании мыши кнопкой вниз можно перетаскивать все выбранные точки, смещая их данные в структуре данных, упомянутой ранее.

0 голосов
/ 16 января 2014

Я бы попробовал следующее:

  1. В C # есть ObservableCollection<Point> или, возможно, PointCollection.
  2. Из этой коллекции, через привязку данных, я бы нарисовал Path и каким-то образом получил ее геометрию из коллекции;
  3. Над самим слоем пути я бы добавил какой-то ItemContainer, установив для ItemTemplate значение System.Windows.Controls.Primitives.Thumb (элемент управления, который обрабатывает перетаскивание), а шаблон ControlTemplate с формой Ellipse и DataTrigger изменяет свой внешний вид в зависимости от выбора или нет. ItemsSource также будет привязан к коллекции.

Делая это, вы проверяете путь, например, чтобы выделить его точки, что включит видимость ItemsContainer (и, следовательно, проверку попаданий).

С их помощью вы можете использовать обычные события, такие как «Перетаскивание», «MouseMove» и т. Д., Непосредственно обрабатывая проверку нажатия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...