在页面上,我动态地将UserControl添加到GridView中。因此,每个UserControl都可以包含不同类型的控件(TextBox,CheckBox,单选按钮)
说,UserControl的名称是:UserForm。
问题: 如何使用VisualTreeHelper获取控件集合并检查textBox是否为空。我发现了一个与此问题类似的代码并对其进行了修改但无效。
我不知道这意味着什么,如果需要这个?
list.AddRange(AllTextBoxes(子))
我应该使用MyList.Select()还是MyList.Where()?
void FindTextBoxes() { List <TextBox> MyList = AllTextBoxes(UserForm); var count = MyList.Where(x= > if(string.IsEmptyOrNull(x.Text)); } List <TextBox> AllTextBoxes(DependencyObject parent) { var list = new List <TextBox>(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is TextBox) list.Add(child as TextBox); list.AddRange(AllTextBoxes(child)); } return list; }
答案 0 :(得分:5)
这是我使用的。
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var textBoxes = AllChildren(MyGridView).Where(x => x is TextBox);
}
public IEnumerable<Control> AllChildren(DependencyObject parent)
{
for (int index = 0; index < VisualTreeHelper.GetChildrenCount(parent); index++)
{
var child = VisualTreeHelper.GetChild(parent, index);
if (child is Control)
yield return child as Control;
foreach (var item in AllChildren(child))
yield return item;
}
}
祝你好运!