在WPF中查找控件的所有后代?

时间:2017-05-18 09:20:21

标签: wpf

我希望获得包含在边框中的Grid控件(未分配Name),结构如下所示:

<Grid x:Name="main">
   <uc:myUc/>
   <Border>
       <!--other elements-->
   </Border>
   <Border>
        <Grid x:Name="myGrid">
           <!--I want to get all controls here-->
        </Grid>
   </Border>
</Grid>

myUc是一个用户控件,其中有一个按钮,单击该按钮时,我想获取网格myGrid内的所有控件: 这是我正在使用的代码,似乎我应该向容器Name提供Border以便能够获得其子代,但这对我的应用程序来说是一个巨大的变化。 / p>

var parent = VisualTreeHelper.GetParent(this) as UIElement;
var grid = (parent as Grid);
var chldrn = grid.Children;
foreach (var item in chldrn)
{
    var child = item;
}
//I stopped here!

有没有办法找到元素的所有后代来确定我采取哪种控制?

1 个答案:

答案 0 :(得分:1)

您可以按类型

访问容器中的任何类型的子项

XAML示例:

<Grid x:Name="myGrid">
    <Button Content="Button1"></Button>
    <Button Content="Button2"></Button>
    <CheckBox Content="CheckBox1"></CheckBox>
</Grid>

C#示例

private void Button_Click(object sender, RoutedEventArgs e)
{
    foreach(var Child in myGrid.Children.OfType<Button>()) // this will only get buttons in grid's children
    {
        MessageBox.Show(Child.Content);
    }

    //another way:

    foreach(var Child in myGrid.Children)
    {
        if (Child is CheckBox)
        {
            var checkBox = (CheckBox)Child;
            checkBox.IsChecked = true;
        }
    }
}