2

在标准 WinForms 开发中,我会执行以下操作:

foreach (Control in groupBox1.Controls)
{
     MessageBox.Show(c.Name);
}

一个人如何在 WPF 中做到这一点?我在 GroupBox 中有一个 Grid,在网格中有一些控件(按钮等),但似乎无法弄清楚如何获取每个控件。

4

4 回答 4

6

正如 MSDN 建议的那样,您需要将控件迭代为GroupBox. 另外,请注意,您通常需要在 中添加 a才能将新控件添加Grid到. 因此,您需要获取其中的孩子并遍历它们,如下所示:GroupBoxGroupBoxGridGroupBox

//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

于 2009-10-01T18:11:51.583 回答
1

更简单的代码就像

foreach (Control control in Grid.Children)
 {
  //Code here for what you want to do.
 }
于 2015-01-30T03:19:24.520 回答
0

我知道这是一个旧线程并且标记为已接受的答案有效,但它可能更简单(更简单更好)。Anthony 得到了这个想法,但没有提到需要在 GroupBox 内的网格上进行迭代,并且没有解释如何到达那里。

在 XAML 中,为 GroupBox 控件内的主网格命名(此处假设您将其命名为“GroupBoxGridName”)。这将允许您搜索此 Grid 内的控件,包括主组框网格中的任何网格内的控件(递归)。

然后在 C# 代码中执行此操作:

foreach (ControlType myControl in GroupBoxGridName.ChildrenOfType<ControlType>)
{
        MessageBox.Show(MyControl.Name);
}

其中 ControlType 可以是一般的 Control 或定义的类型,如 TextBox 或 ComboBox 或其他。

于 2021-03-06T19:55:06.193 回答
-3

而不是.Controls,您将寻找该.Children属性。

此外,这只会返回一阶子级。如果您真的想要GroupBox.

于 2009-10-01T17:44:56.053 回答