在标准 WinForms 开发中,我会执行以下操作:
foreach (Control in groupBox1.Controls)
{
MessageBox.Show(c.Name);
}
一个人如何在 WPF 中做到这一点?我在 GroupBox 中有一个 Grid,在网格中有一些控件(按钮等),但似乎无法弄清楚如何获取每个控件。
在标准 WinForms 开发中,我会执行以下操作:
foreach (Control in groupBox1.Controls)
{
MessageBox.Show(c.Name);
}
一个人如何在 WPF 中做到这一点?我在 GroupBox 中有一个 Grid,在网格中有一些控件(按钮等),但似乎无法弄清楚如何获取每个控件。
正如 MSDN 建议的那样,您需要将控件迭代为GroupBox
. 另外,请注意,您通常需要在 中添加 a才能将新控件添加Grid
到. 因此,您需要获取其中的孩子并遍历它们,如下所示:GroupBox
GroupBox
Grid
GroupBox
//iterate through the child controls of "grid"
int count = VisualTreeHelper.GetChildrenCount(grid);
for (int i = 0; i < count; i++)
{
Visual childVisual = (Visual)VisualTreeHelper.GetChild(grid, i);
if (childVisual is TextBox)
{
//write some logic code
}
else
{
}
}
您可能会发现这很有用:http ://social.msdn.microsoft.com/Forums/en-US/wpf/thread/93ebca8f-2977-4c36-b437-9c82a22266f6
更简单的代码就像
foreach (Control control in Grid.Children)
{
//Code here for what you want to do.
}
我知道这是一个旧线程并且标记为已接受的答案有效,但它可能更简单(更简单更好)。Anthony 得到了这个想法,但没有提到需要在 GroupBox 内的网格上进行迭代,并且没有解释如何到达那里。
在 XAML 中,为 GroupBox 控件内的主网格命名(此处假设您将其命名为“GroupBoxGridName”)。这将允许您搜索此 Grid 内的控件,包括主组框网格中的任何网格内的控件(递归)。
然后在 C# 代码中执行此操作:
foreach (ControlType myControl in GroupBoxGridName.ChildrenOfType<ControlType>)
{
MessageBox.Show(MyControl.Name);
}
其中 ControlType 可以是一般的 Control 或定义的类型,如 TextBox 或 ComboBox 或其他。
而不是.Controls
,您将寻找该.Children
属性。
此外,这只会返回一阶子级。如果您真的想要GroupBox
.