代码之家  ›  专栏  ›  技术社区  ›  Douglas Anderson

如何在WPF中获取groupbox中的控件列表

  •  2
  • Douglas Anderson  · 技术社区  · 16 年前

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

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

    一个人在WPF里是怎么做到的?我在GroupBox中有一个网格,网格中有许多控件(按钮等),但似乎不知道如何获取每个控件。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Iswanto San Ajay2707    13 年前

    正如MSDN所建议的,您需要将控件作为 GroupBox . 另外,请注意,您通常需要添加 Grid 进入你的 能够在其中添加新控件 分组框 网格 因为 分组框 然后迭代它们,类似这样:

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

        2
  •  1
  •   Anthony    11 年前

    更简单的代码应该是

    foreach (Control control in Grid.Children)
     {
      //Code here for what you want to do.
     }
    
        3
  •  0
  •   Dharman vijay    5 年前

    我知道这是一个古老的线索,答案标记为已接受,但它可以更简单(简单更好)。 Anthony得到了这个想法,但没有提到需要在GroupBox内部的网格上迭代,也没有解释如何到达那里。

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

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

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

    其中ControlType可以是常规控件或定义的类型,如TextBox或ComboBox或其他类型。

        4
  •  -3
  •   Iswanto San Ajay2707    13 年前

    而不是 .Controls .Children

    此外,这将只返回一阶子级。如果确实需要所有控件的子控件,则需要递归查找所有控件的所有子控件 GroupBox

    推荐文章