如何在Silverlight中从父级元素中找到所有元素

3

在这里,我希望通过按钮点击事件来查找元素并验证一些文本框。

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

        // button Parent
        var stackPanel = button.Parent as StackPanel;

        // button Parent > parent
        var parentStackPanel = stackPanel.Parent as StackPanel;

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

        // button Parent > parent > Children >Elements
        var textBox = childStackPanel.Children.Where(a => a is TextBox).FirstOrDefault() as TextBox;
        var image = childStackPanel.Children.Where(a => a is Image).FirstOrDefault() as Image;

        if (textBox.Text == "") image.Source = new BitmapImage(new Uri("/Images/Others/TickWrong.png", UriKind.RelativeOrAbsolute));

    }

问题在于我只能通过FirstOrDefault()找到第一个元素。

var childStackPanel = parentStackPanel.Children.Where(a => a is StackPanel).FirstOrDefault() as StackPanel;

有没有可能通过数组或其他方式找到所有元素?
2个回答

1

移除FirstOrDefault。

var childStackPanels = parentStackPanel.Children.Where(a => a is StackPanel);

这将返回一个 IEnumerable<T>,您可以对其进行迭代。

要获取列表,您可以使用 IEnumerable<T>ToList() 扩展方法。


0

博客中的VisualTreeEnumeration类添加到您的项目中。这会为DependencyObject提供一些扩展方法,使用VisualTreeHelper查找元素。有了这个,您就可以枚举TextBox控件:

 foreach (var txt in this.Descendents().OfType<TextBox>())
 {
     // Do something with each TextBox found.
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接