循环遍历stackPanel.children genericaly

时间:2013-02-04 13:48:42

标签: casting combobox foreach controls stackpanel

在代码中我动态添加控件(例如TextBox,ComboBox,Label等),我现在想要循环,并从用户输入数据的每个适用(例如不是标签)控件中获取值。

        foreach (Control control in EditForm.Children)
        {
            values = new List<string>();
            fieldName = control.Name;

            if (control is ComboBox)
            {
                ComboBox cmb = control as ComboBox;

                string value = cmb.SelectedValue.ToString();
            }
         }

问题是我在

运行时遇到错误
  

无法将'System.Windows.Controls.TextBlock'类型的对象强制转换为   输入'System.Windows.Controls.Control'。

我应该使用更通用的类而不是'Control'吗?如何遍历每个控件并访问所需的值(包括控件的名称)

1 个答案:

答案 0 :(得分:0)

“UIElement”很可能是一个安全的选择。

如果您只对特定类型的元素感兴趣,您还可以考虑使用Linq按类类型过滤掉元素(不要忘记包含“using System.Linq”指令):

foreach (ComboBox combo in EditForm.Children.OfType<ComboBox>())
{
   //...
}