如何在Silverlight中查找Parent中的每个元素

时间:2011-12-20 06:40:57

标签: c# silverlight linq

这里我想通过按钮Click事件

上的Element Finding验证几个文本框
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 个答案:

答案 0 :(得分:1)

删除FirstOrDefault。

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

这将返回您可以迭代的IEnumerable<T>

要获取列表,您可以使用ToList()

IEnumerable<T>扩展方法

答案 1 :(得分:0)

将此blog中的VisualTreeEnumeration课程添加到您的项目中。这为DependencyObject提供了一些使用VisualTreeHelper查找元素的扩展方法。有了这些,您可以使用以下命令枚举TextBox控件: -

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