2011-02-06 4 views
0

Я хочу, чтобы достичь следующего с приложением WPF (в определенной области/определенной области):квадраты рисования в WPF

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

Что мне нужно, чтобы достичь этого, я полагаю, кучу OnClick/OnMove лет. Есть ли более простой способ, например, использование холста? Любое понимание было бы здорово.

ответ

3

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

Событие с мышью будет определять один угол, а мышь - вторую. Вы должны были бы ограничить движение курсора так, чтобы размеры x и y прямоугольника были одинаковыми.

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

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

+0

Как бы я идти о проверке перекрытий? Могу ли я сохранить размеры в каком-то массиве и вычислить его при перетаскивании нового квадрата? Если это так, это звучит немного интенсивно для каждого движения мыши. Наверное, я всегда мог проверить на мышку. – Prisoner

+0

@ Prisoner, если нет квадратов квадратов, это не должно быть слишком интенсивным. Вы всегда можете изменить код позже, если он станет проблемой. – ChrisF

+0

Хорошо спасибо за это. Я отдам его и посмотрю, как все идет. Любые другие идеи от других людей приветствуются! – Prisoner

1

Там есть код проект статья, описывающая, как перетащить элементы внутри Canvas: Dragging Elements in a Canvas

Говоря о упоминании ChrisF о использовании Canvas, я бы предложил использовать DragCanvas (найденная в статье)

+0

Спасибо за ссылку .. Я, однако, уже прочитал ее раньше, но просто хотел, чтобы SOs внесли свой вклад в проблему. Кроме того, я хотел бы сделать это, не используя предварительно написанный класс в качестве учебного упражнения! – Prisoner

Смежные вопросы