2016-09-14 7 views
1

だから私は今、私は「」コントロールを形成し、私は次のコード要素のすべての子要素にアクセスできませんか?

int c = myMap.Children.Count; 
      for (int i = 0; i < c; i++) 
      { 

       if(myMap.Children.ElementAt(i) is Image) 
       { 
        var z = myMap.Children.ElementAt(i) as Image; 
        if(z.Name.Equals("a")) 
         { 
         myMap.Children.Remove(myMap.Children.ElementAt(i)); 
        } 


       } 


      } 

しかし、常にいくつかを使用してい要素名を削除したいこの

foreach (var res in results) 
      { 
       if (res.geometry.location != null) 
       { 
        var pushpin = new Image(); 
        pushpin.Name = "a"; 
        BasicGeoposition bs = new BasicGeoposition { Latitude = res.geometry.location.lat, Longitude = res.geometry.location.lng }; 
        pushpin.Source = new BitmapImage(uri); 
        pushpin.Height = 50; 
        pushpin.Width = 50; 
        myMap.Children.Add(pushpin); 
        MapControl.SetLocation(pushpin, new Geopoint(bs)); 


       } 

      } 

のようなマップコントロールにいくつかの要素を追加してい要素は削除されません。たとえば、子の数は21になりますが、ループは10回だけループしています。 どうすればこの問題を解決できますか?

+2

ループバックワード。要素1を削除すると、要素2は1になり、要素3は2になります。だから、あなたのループは元の2ではない要素2をテストします。 – GuidoG

+0

正しいタグを使用してください。確かに、問題はすべての現在のタグに関連していません。 –

答えて

2

ループ中にあなたのコレクションを混乱させないように、ループバックでそれを試してください。

int c = myMap.Children.Count - 1; 
for (int i = c; i >= 0; i--) 
{ 
    if (myMap.Children.ElementAt(i) is Image) 
    { 
     var z = myMap.Children.ElementAt(i) as Image; 
     if(z.Name.Equals("a")) 
     { 
      myMap.Children.Remove(myMap.Children.ElementAt(i)); 
     } 
    } 
} 
関連する問題