简体   繁体   English

从多个父级获取 UIElement 子级

[英]Get UIElement children from multiple parent

I have a StackPanel with some WrapPanel .我有一个StackPanel和一些WrapPanel inside each WrapPanel located two element:在每个WrapPanel内有两个元素:

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

I want to get all children of type check box .how can i do this?我想获得所有类型的孩子复选框。我该怎么做?

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

Thank You in Advance.先感谢您。

Use this recursive function:使用这个递归函数:

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

No you can say:不,你可以说:

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

I got it first loop through warp panels and get its child我首先通过经纱面板循环并得到它的孩子

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM