如何将UserControl中的所有textBox添加到GridView中

时间:2014-12-06 15:26:23

标签: winrt-xaml

在页面上,我动态地将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;
}


1 个答案:

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

祝你好运!

相关问题