WPF Canvas: центрированное начало, масштабированные оси (и y перевернутые), реагирование на события мыши - PullRequest
3 голосов
/ 10 февраля 2010

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

Я нашел вопросы, подобные этому, здесь, в StackOverflow, но не смог найти ни этот, ни простой способ адаптировать другой ответ к моей конкретной проблеме (обратите внимание, что у меня мало опыта в WPF).

На моем холсте мне бы хотелось, чтобы он имел следующие свойства:

  1. точка (0, 0) находится в центре Canvas;
  2. ось x направлена ​​вправо;
  3. ось Y указывает на вершину;
  4. точка (1, 0) составляет около 1 дюйма справа от начала координат; и
  5. в каждом случае положение мыши задается в системе координат, определенной выше.

В этом ответе Рэй Бернс предлагает очень простое решение для моих первых 3 пунктов. Тривиально изменить этот код так, чтобы он также работал с моей точкой № 4 (измените 1 и -1 в RenderTransform на другие константы).

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

Какой самый простой способ добиться этого? Наследовать от Panel и делать все вручную? Наследовать от Canvas, перехватывать каждое событие и изменять координаты?

1 Ответ

0 голосов
/ 25 февраля 2011

Положите Canvas внутрь Border. Border имеет события мыши. Другой случай - разместить Border на вершине Canvas.

.
...