Как решить следующую проблему с C # и Silverlight? (Фигуры на холсте) - PullRequest
0 голосов
/ 15 февраля 2011

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

Когда я нажимаю на узел, мне нужно иметь возможностьвернитесь к родительскому объекту Node и измените его.

Добавление прослушивателя MouseLeftButtonUp, а затем переход к e.OriginalSource не работает, поскольку исходный источник имеет тип Ellipse (или некоторый другой Shape), а не тип Node.

Я вижу два решения этой проблемы:

1) Если есть какой-либо способ присоединения данных к эллипсу, такой как идентификатор узла, это было бы хорошо (что-то вроде эллипса).AddLogicalChild или Ellipse.SetCurrentValue, но я не уверен, что это сработает или если будет целесообразно использовать один из этих методов).2) Или мне нужен Node для получения некоторого класса Shape, чтобы я мог добавить его непосредственно в Canvas.Children.

Как мне сделать любой из этих?Или, если вы видите другое решение, пожалуйста, дайте мне знать.

Спасибо,

Антон Каневский

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

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

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

1 голос
/ 15 февраля 2011

Вы можете использовать контейнер Dictionary для хранения ссылок на все ваши фигуры и узлы. Чтобы получить Узлу заданную Форму, просто используйте

dict.TryGetValue(shape, out Node);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...