如何在Silverlight中查找嵌套元素

时间:2011-12-19 16:35:59

标签: c# silverlight

private void button_Click(object sender, RoutedEventArgs e)
{
   var button = (Button) sender;

   var stackPanel = button.Parent as StackPanel;
   var childStackPanel = stackPanel.Children.Where(a => a is StackPanel).FirstOrDefault();

   // var textbox = childStackPanel.Children.Where(a => a is StackPanel).FirstOrDefault();
}

在这种情况下,无法在元素,文本框中获取元素。

但是当我编码chidStackPanel.Children时,它会出错。没有儿童房产。

2 个答案:

答案 0 :(得分:5)

您的Where正在过滤掉儿童,这是UIElement的集合,没有Children属性。你需要把它投射到StackPanel。但不是那样,OfType来救援:

var childStackPanel = stackPanel.Children.OfType<StackPanel>().FirstOrDefault();

OfType过滤掉不属于该类型的项目,同时将其转换为该类型。

答案 1 :(得分:0)

问题是“var”语法在编译时从语句的右侧派生类型。

即使您使用“Where”明确选择了第一个作为StackPanel的子项,编译时的派生类型仍然是UIElement。 UIElement没有儿童财产。

您需要使用“(StackPanel)”或“as”将该语句的结果显式地转换为StackPanel。