这里我想通过按钮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;
有没有找到所有元素的方法。 通过数组或其他东西??
答案 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.
}