2012-04-02 41 views
0

我正在爲XNA遊戲創建接口,但似乎無法找出結果。我是編程新手,感覺我不得不錯過某些明顯的東西。獲取WP7中的動態(運行時)按鈕以與對象關聯

我創建了一個關卡網格,很像您在「憤怒的小鳥」中看到的東西。
級別的數量將是可變的,所以我不想靜態編程它們。

所有用於關卡圖標的按鈕都是在運行時根據關卡對象列表動態創建的。在我創建按鈕時,我將所有的點擊事件設置爲指向一個應該確定點擊哪個按鈕的方法,並加載該特定級別。

我的問題是,我似乎無法找出一種可靠的方式來實際告訴他們點擊和與列表中的我的水平的一個對象相關聯的按鈕。我覺得我必須錯過一些非常明顯的東西。

事情我試過到目前爲止:

正如我生成按鈕動態我加他們爲孩子的網格。所以我嘗試使用發件人的索引號作爲我的列表中的索引號(因爲它們應該具有相同數量的元素)。 例如: App.CurrentLevel = PuzzleLevelsGrid.Children.IndexOf(sender as Button);

第一次導航到關卡採集屏幕時,這很好用,但是每當我回到關卡時,我的網格的孩子因爲某種原因被重置爲0,所以它打破了。 我已經設置了中斷點,我無法解釋它是如何設置爲0.我在我的onNavigatedTo()中加載子項,並且在結束和我按下按鈕以加載它被擦除的級別之間的某個時間。

我嘗試的另一件事是在我的實際級別對象中設置一個按鈕對象,然後當動態創建級別按鈕時,我實際上對適當級別的按鈕屬性進行了更改。
然後,當我需要找出哪個按鈕是發件人時,我只是循環遍歷所有級別並將發件人與按鈕屬性進行匹配。這個方法實際上工作得很好...直到我開始嘗試使用後臺工作線程加載我的級別。工作線程無法處理Button,因爲它是一個UI線程,並且崩潰。

就像我說的,我是一個新的程序員,所以我歡迎任何和所有的反饋。 在此先感謝。

回答

0

該按鈕與幾乎每個UI控件一樣,都具有「標籤」屬性。這個屬性是爲你設計的,只爲你設計,這樣你就可以把你喜歡的任何值識別出來。例如,您可以將您的關卡對象放在按鈕的Tag屬性中,然後在click事件中讀取此值。

+0

非常感謝您的回覆。我一直在網上查找,似乎無法找到使用此標記的任何示例。你能給我一個這個標籤看起來像什麼的簡單例子嗎? 它只是一個容器,我可以傾倒信息? – Riot9 2012-04-02 14:00:59

+0

這只是'object'類型的屬性,你可以放任何你想要的東西。創建按鈕時,設置標籤:'button.Tag = myLevelObject;'。然後,在click事件中,檢索它:'var myLevelObject =((Button)sender).Tag as Level;' – 2012-04-02 14:30:52

+0

非常感謝KooKiz。我知道我必須失去一些東西。我知道這對任何有經驗的程序員都是顯而易見的,但是你爲我節省了很多時間和挫敗感。 再次感謝! – Riot9 2012-04-03 01:56:09