0

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

必须在 .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不是“theChild”
的选项,.content 也不是“theChild”的选项

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

4

3 回答 3

0

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

于 2013-02-07T20:23:30.520 回答
0

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

  • Decorator- 这很可能是一个Border,但还有其他的。带 1 名儿童入住Child
  • Panel- StackPanel, Grid,Canvas等。可以通过添加到Children属性中来拥有任意数量的孩子。
  • ContentControl- 除了使用基类本身还包括诸如Button, Label,之类的东西ExpanderContent可以在该物业上接受 1 个孩子,但与Decorator.Child此不同的是类型object,可以带任何东西。设置的Content也不是直接的可视化树子Decorator,而是注入到控件的ControlTemplate. 如果Content设置为非 UI 元素,也可以使用DataTemplate.
  • ItemsControl- ListBox, ComboBox,ItemsControl等。类似于ContentControl但通过 Items 或 ItemsSource 属性获取内容集合(用法略有不同,只能使用其中一个)。通过添加Items或添加到绑定到的任何集合来添加子级ItemsSource
  • 其他不带孩子的 - TextBlock, TextBox, Slider, 许多其他人。

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

于 2013-02-07T20:58:31.953 回答
0

你试过 thisChild.AddVisualChild(controlToAdd) 吗?

请参阅此处的文章

于 2013-02-07T20:19:26.117 回答