2014-12-06 61 views
1

在页面上,我将UserControl动态添加到GridView中。因此,每个UserControl可以包含不同类型的控件(TextBox,CheckBox,Radio Button)如何将UserControl中的所有文本框添加到GridView中

说,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

为什么不在你的usercontrol中实现验证? – MatDev8 2014-12-09 09:54:39

回答

3

这是我使用的。

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; 
    } 
} 

祝你好运!

相关问题