Ваш первый фрагмент даже не скомпилируется (при условии, что groupBox1
действительно GroupBox
), так как GroupBox
не имеет свойства Children
.
A GroupBox
может содержать только один дочерний элемент, представленный свойством Content
.
Если вам нужно перебрать все визуальные дочерние элементы GroupBox
, вы можете использовать класс VisualTreeHelper
. Примерно так:
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(groupBox1); i++)
{
var txt = VisualTreeHelper.GetChild(groupBox1, i);
if (txt is TextBox) ...
}
Обновление
Хорошо, вы говорите, что это не работает, и я думаю, что понимаю, почему.
VisualTreeHelper
найдет только визуальные дочерние элементы первого уровня GroupBox
, которые (при реализации элемента управления) являются Grid
.
Это нехорошо для вас, потому что вам нужно заглянуть в дочерние элементы элемента управления и найти все текстовые поля.
В этом случае вам лучше использовать одну из многих рекурсивных реализаций "FindChildren" в Интернете. Вот один из моих:
public static class DependencyObjectExtensions
{
public static IEnumerable<T> GetVisualChildren<T>(this DependencyObject depObj)
where T : DependencyObject
{
if (depObj == null) yield break;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var t = child as T;
if (t != null) yield return t;
foreach (var item in GetVisualChildren<T>(child))
{
yield return item;
}
}
}
}
Вы можете использовать это так:
foreach (var txt in groupBox1.GetVisualChildren<TextBox>())
{
txt.Text = String.Empty;
}