2013-03-03 6 views
0

나는 StackPanel이고 일부는 WrapPanel입니다. 각 WrapPanel에 위치한 두 개의 요소 내부 :여러 부모로부터 UIElement 자식 가져 오기

<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/> 

나는이 작업을 수행 할 수 있습니다 괜찮나 유형 확인란의 모든 아이를 얻으려면?

진보 감사합니다.

답변

2

사용이 재귀 함수 :

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; 
} 

없음 당신이 말할 수 있습니다 :

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

을 나는 워프 패널을 통해 첫 번째 루프 없어 그 아이 당신이 경우 어떻게

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

를 얻을 수 'WrapPanel' 안에 또 다른'Panel' 또는'Grid'? 내 대답은 중첩의 모든 수준을 처리합니다. –

+0

@ MD.Unicorn : 당신의 대답이 더 감사하다는 것을 압니다. – KF2

+0

@ MD.Unicorn,이 (OP)의 대답은 OP의 * 현재 * 질문에 대한 답입니다. 새로운 패널이 도입되면 실패합니다. 현재 레이아웃에 의존하기 때문에 아주 좋은 해결책은 아닙니다. 즉, 미래를 보장하는 것이 아닙니다. –