Можно ли добавить Shapes из Canvas в 2D-массив, где расположение 2D-массива соответствует расположению ячейки управления Grid внизу? - PullRequest
2 голосов
/ 15 июня 2011

Я знаю, что это кажется полным беспорядком вопроса, но здесь идет:

Я, по сути, создал симуляцию в Silverlight как упражнение по программированию. У меня есть полупрозрачный холст, который живет поверх сетки с 40 строками и 30 столбцами. Я могу поместить объект холста в ячейки сетки, чтобы изменить цвет для отображения воды, травы, песка или чего-либо еще. Однако мои агенты ИИ существуют на холсте, так что их можно плавно перемещать по поверхности, а не зубчатым способом, как это делает сетка.

Мне просто интересно, имел ли кто-нибудь опыт доступа к относительной координате между холстом и сеткой. Ячейки сетки имеют размер 5x5, где точки холста, очевидно, представляют собой однозначные цифры от 0 до 400. Я просто пытаюсь найти способ собрать все фигуры на холсте относительно их положения в сетке.

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

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

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

0 голосов
/ 15 июня 2011

Я не уверен, поможет ли это вам, но у меня недавно была похожая (хотя и очень неопределенно похожая) ситуация.В конечном итоге я установил Grid.Row и Grid.Column на 0, а Grid.RowSpan и Grid.ColumnSpan - на количество строк / столбцов в сетке.(Легко сделать динамически, просто взяв Grid.ColumnDefinitions/RowDefinitions.Count.)Затем, если вы хотите, чтобы он имитировал Canvas, установите HorizontalAlignment = Left и VeritcalAlignment = Top, а затем, вместо изменения Canvas.Top или Canvas.Left, просто измените Margin.Top и Margin.Left.Работал как мечта для меня.Не хватает только свойства Canvas.ZIndex.К сожалению, это немного сложнее для эмуляции, поскольку включает в себя изменение порядка ваших агентов в Grid.Children.Однако, когда у меня возникают подобные проблемы, я обычно просто создаю свойство, которое обрабатывает все технические вещи, поэтому я могу выбирать как int.Надеюсь, что это поможет, и дайте мне знать, если вы использовали его и вам нужна рука, чтобы написать фейкер Canvas.ZIndex!

...