在运行时将控件添加到子控件
本文关键字:控件 添加 运行时 | 更新日期: 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)吗?
请参阅此处的文章
根据UI结构的不同,可能会发生很多不同的变化。一些常见元素类可能是StackPanel
:的子元素
Decorator
——这很可能是Border
,但也有其他的。在Child
属性上取1个子项Panel
-StackPanel
、Grid
、Canvas
等。通过添加到Children
属性,可以拥有任意数量的子项ContentControl
——除了使用基类本身之外,还包括Button
、Label
、Expander
等等。可以接受Content
属性上的1个子级,但与Decorator.Child
不同,它属于object
类型,可以接受任何内容。设置的Content
也不像Decorator
那样是直接可见的树子级,而是注入控件的ControlTemplate
中。如果Content
被设置为非UI元素,那么它也可以用DataTemplate
模板化ItemsControl
-ListBox
、ComboBox
、ItemsControl
等。与ContentControl
类似,但通过Items或ItemsSource属性获取内容集合(用法略有不同,只能使用其中一个)。通过添加到Items
或绑定到ItemsSource
的任何集合来添加子项- 其他不带孩子的——
TextBlock
、TextBox
、Slider
,还有很多其他
还有其他的可能性,但这些都是最常见的。选入Control
不会给你带来任何好处,因为它们可以属于最后3类中的任何一类,而错过了前2类。您应该准确地定义您希望在StackPanel
中找到的内容,并将接受的类型限制为parentType
,然后强制转换为前4种类型之一以设置子类型。