Получение динамических (во время выполнения) кнопок в WP7 для связи с объектами - PullRequest
0 голосов
/ 02 апреля 2012

Я создаю интерфейс для игры XNA и, похоже, ничего не могу понять.Я новичок в программировании и чувствую, что мне не хватает чего-то очевидного.

Я создаю сетку уровней, очень похожую на то, что вы видели в Angry Birds.
Количествоуровни будут переменными, поэтому я не хочу их статически программировать.

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

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

То, что я до сих пор пробовал:

Когда я генерирую кнопки динамически, я добавляю их как дочерние элементы в сетку.Поэтому я попытался использовать порядковый номер отправителя в качестве порядкового номера в моем списке уровней (поскольку они должны иметь одинаковое количество элементов).Например: App.CurrentLevel = PuzzleLevelsGrid.Children.IndexOf (отправитель как кнопка);

Это прекрасно работало, когда я в первый раз переходил на экран выбора уровня, но всякий раз, когда я возвращался к нему, дети моей сеткипо какой-то причине сбрасывается до 0, поэтому он выходит из строя.Я установил точки останова, и я не могу объяснить, как он устанавливается в 0. Я загружаю потомки в свой onNavigatedTo (), и когда-то между окончанием этого и я нажимаю кнопку, чтобы загрузить уровень, он стирается.

Другая вещь, которую я попробовал, была настройка объекта кнопки внутри моего фактического объекта уровня, затем при динамическом создании кнопок уровня я фактически вносил изменения в свойство кнопки на соответствующем уровне.
Затем, когда мне нужновыяснить, какая кнопка была отправителем. Я просто перебираю все уровни и сопоставляю отправителя со свойством кнопки.Этот метод действительно работал довольно хорошо ... пока я не начал пытаться загружать свои уровни, используя фоновый рабочий поток.Рабочий поток не может иметь дело с Button, потому что он имеет отношение к пользовательскому интерфейсу и вылетает.

Как я уже сказал, я новый программист, поэтому я приветствую любые отзывы.Заранее спасибо.

1 Ответ

0 голосов
/ 02 апреля 2012

Кнопка, как и почти каждый элемент управления пользовательского интерфейса, имеет свойство «Tag».Это свойство было разработано для вас и только для вас, чтобы вы могли указать любое значение для идентификации элемента управления.

Например, вы можете поместить объект уровня в свойство Tag кнопки, а затем просто прочитать это значение в событии click.

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