2013-03-03 3 views
0

J'ai un StackPanel avec quelques WrapPanel. l'intérieur de chaque WrapPanel situé deux éléments:Obtenir des enfants UIElement de plusieurs parents

<StackPanel FlowDirection="RightToLeft" Grid.Column="2" Grid.Row="1" Name="check_boxes_layout"> 
    <WrapPanel> 
     <CheckBox Name="chk1" Checked="Checked_Changed" Unchecked="Unchecked"></CheckBox> 
     <Rectangle Width="50" Fill="Red" Name="rec1" Margin="10 2 2 2"/> 
    </WrapPanel> 
    <WrapPanel> 
     <CheckBox Name="chk12" Checked="Checked_Changed" Unchecked="Unchecked"></CheckBox> 
     <Rectangle Width="50" Fill="Blue" Name="rec2" Margin="10 2 2 2"/> 
    </WrapPanel> 
<StackPanel/> 

Je veux que tous les enfants de case à cocher de type .Comment puis-je faire cela?

foreach (var item in check_boxes_layout.Children.OfType<CheckBox>()) 
{ 
    //this code just return Wrap Panel 
} 

Merci d'avance.

Répondre

2

Utilisez cette fonction récursive:

List<UIElement> GetAllChildren(Panel c) 
{ 
    List<UIElement> list = c.Children.Cast<UIElement>().ToList(); 
    foreach(var elem in list.OfType<Panel>()) 
     list.AddRange(GetChildren(elem)); 
    return list; 
} 

Non, vous pouvez dire:

foreach (var item in GetAllChildren(check_boxes_layout).OfType<CheckBox>()) 
{ 
    //... 
} 
0

Je l'ai première boucle à travers des panneaux de chaîne et obtenir son enfant

foreach (WrapPanel warppanel in check_boxes_layout.Children) 
{ 
    foreach (var item in warppanel.Children.OfType<CheckBox>) 
    { 
      . 
      . 
      . 
    } 
} 
+0

Que faire si vous avez un autre 'Panel' ou' Grid' dans le 'WrapPanel'? Ma réponse gère n'importe quel niveau d'imbrication. –

+0

@ MD.Unicorn: je sais que votre réponse est plus complète merci. – KF2

+0

@ MD.Unicorn, cette réponse (OP) répond à la question * current * de l'OP. Néanmoins, ce n'est pas une très bonne solution car cela dépend de la mise en page actuelle: elle échouera si de nouveaux panneaux sont introduits. Autrement dit, ce n'est pas à l'épreuve du futur. –

Questions connexes