2014-09-12 53 views
0

我試圖在Windows Phone中開發遊戲。我是一個使用c#和xaml的初學者。在xaml中,我只有Tag屬性的對象具有相同的屬性。我想要做的是循環通過對象標籤,並改變另一個對象(圖像),如果我找到一個特定的標籤。在Windows Phone中循環訪問對象以獲取其屬性

我已經嘗試了一些代碼,就像這樣:

foreach(Image tag in img) //but it says: 

foreach語句不能對類型的變量 'Windows.Ui.Xaml.Controls.Image',因爲「Windows.Ui.Xaml操作。 「Controls.Image」不包含'GetEnumerator'的公共定義...

+5

'圖像'不是一個集合,所以這是有道理的。老實說,整個用例聽起來很奇怪。你能否充實你想要完成的事情,這樣我們可以提出一個更好的方法? – BradleyDotNET 2014-09-12 18:36:33

+0

錯誤信息告訴你到底發生了什麼錯誤。如果你不熟悉'GetEnumerator',那麼就直接google吧 – MethodMan 2014-09-12 18:39:26

回答

2

因爲作爲一個初學者,你不太可能使用MVVM,只是在查看放下一切,你可以做的就是通過LayoutRoot週期。如果您有包含圖像的layoutroot其他面板,你想遞歸做到這一點:

MainPage() 
{ 
    DoSomethingToImages(LayoutRoot); 
} 

DoSomethingToImages(Panel panel) 
{ 
    foreach(Image img in panel.Children.Where(x=> x is Image)) 
    { 
     DoSomething(img); 
    } 
    var panels = panel.Children.Where(x=> x is Panel); 
    if (panels.Count > 0) 
    { 
     foreach(Panel p in panels) 
     { 
      DoSomethingToImages(p); 
     } 
    } 
} 

在另一方面,這顯然是不好的做法,你通常會你的圖片綁定到您的視圖模型。唯一的例外可能是高度自定義的用戶控件,以使事情工作,否則將非常耗費時間來解決MVVM。 (注意:我認爲MVVM對於自定義控件並不總是必需的,因爲很多時候您只需要一些自定義的圖形行爲,就像一個爲其按下狀態的圖像背景的按鈕一樣,並且這些東西屬於視圖,但通常可以通過視圖中的依賴屬性和一些XAML調整來解決這個問題。另外,將ViewModel分離爲自定義控件使得將其複製到另一個項目時有點困難,如果將它放入自己的項目中 - 必須找到viewmodel以及!:))。

1

像其他人一樣,你需要一個集合來循環播放。
我個人喜歡字典。
下面是一個例子,我認爲你可以根據自己的目的進行修改。

這將使您能夠「循環使用對象標籤」,但是如提到的HighCore,它可能不是「正確的方式」來完成您最終要完成的任何事情。

 Image img1 = new Image(); 
     Image img2 = new Image(); 
     Image img3 = new Image(); 

     img1.Tag = "tag1"; 
     img2.Tag = "tag2"; 
     img3.Tag = "tag3"; 

     Dictionary<string, Image> ImgDictionary = new Dictionary<string, Image>(); 

     ImgDictionary.Add(img1.Tag.ToString(), img1); 
     ImgDictionary.Add(img2.Tag.ToString(), img2); 
     ImgDictionary.Add(img3.Tag.ToString(), img3); 

     foreach (KeyValuePair<string, Image> i in ImgDictionary) 
     { 
      // do stuff with i.Value or i.Key 
     } 

     string tmp_TagName = "tag1"; 
     if (ImgDictionary.ContainsKey(tmp_TagName)) 
     { 
      Image ReturnImage; 
      ImgDictionary.TryGetValue(tmp_TagName, out ReturnImage); 
      // do something with your ReturnImage... 
     } 
+0

這是個不好的建議。您不會在基於XAML的技術中「使用」字典。相反,您使用適當的XAML來定義UI和DataBinding以與之交互。 – 2014-09-12 20:33:02

+0

@HighCore第一:我同意你的看法。第二:這個問題不是關於DataBinding,他只是說'我想要做的是循環通過對象標籤'。最後,OP聲明他是一名初學者,這意味着他可能不會關注[MVVM](http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)。 – 2014-09-12 20:47:33