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
时,它会出错。没有儿童房产。
答案 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。