在运行时将控件添加到子控件

本文关键字:控件 添加 运行时 | 更新日期: 2023-09-27 17:58:09

我正试图在运行时将一个控件添加到另一个控件中。这就是我目前所拥有的:

必须在.net 3.5 中完成

public void addItem(Type addType, Type parentType, string name,string parentName, string fpath)
    {
        try
        {
            if (asdf != null)
            {
            }
            else
            {
                StackPanel stkPnl = (StackPanel)_loadXaml.Content;
                foreach (UIElement child in stkPnl.Children)
                {
                    if ((child.GetType() == parentType))
                    {
                        Control theChild = (Control)child;
                        string theChildsName = theChild.Name;
                        if (theChildsName == parentName)
                        {
                            //I want to create and add the control under "theChild"
                            break;
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }

AddType:是控件的类型
parentType:是要添加的对象的父对象的类型
name:将要添加的对象的名称
parentName:创建的对象将位于

下的父对象的名称

我试过了。Children.Add不是"儿童"的选项
此外,内容不是"儿童"的选项

有没有办法在运行时将控件添加到其父控件中?

在运行时将控件添加到子控件

您尝试过thisChild.AddVisualChild(controlToAdd)吗?

请参阅此处的文章

Wpf中有两种主要类型的控件:内容控件和项目控件。内容控件只有一个可视子控件,而项控件有许多可视子控件。如果要在运行时将和项添加到可视化元素中,我认为必须将该项强制转换为项控件,然后添加所需的项。希望这能帮助你解决你的问题。。。

根据UI结构的不同,可能会发生很多不同的变化。一些常见元素类可能是StackPanel:的子元素

  • Decorator——这很可能是Border,但也有其他的。在Child属性上取1个子项
  • Panel-StackPanelGridCanvas等。通过添加到Children属性,可以拥有任意数量的子项
  • ContentControl——除了使用基类本身之外,还包括ButtonLabelExpander等等。可以接受Content属性上的1个子级,但与Decorator.Child不同,它属于object类型,可以接受任何内容。设置的Content也不像Decorator那样是直接可见的树子级,而是注入控件的ControlTemplate中。如果Content被设置为非UI元素,那么它也可以用DataTemplate模板化
  • ItemsControl-ListBoxComboBoxItemsControl等。与ContentControl类似,但通过Items或ItemsSource属性获取内容集合(用法略有不同,只能使用其中一个)。通过添加到Items或绑定到ItemsSource的任何集合来添加子项
  • 其他不带孩子的——TextBlockTextBoxSlider,还有很多其他

还有其他的可能性,但这些都是最常见的。选入Control不会给你带来任何好处,因为它们可以属于最后3类中的任何一类,而错过了前2类。您应该准确地定义您希望在StackPanel中找到的内容,并将接受的类型限制为parentType,然后强制转换为前4种类型之一以设置子类型。