我正在尝试实现自己的控件,它可以托管一个或多个与控件本身相同类型的子项:
<local:MyControl x:Name="control1">
<local:MyControl x:Name="control2">
<local:MyControl x:Name="control3">
<local:MyControl x:Name="control4">
<local:MyControl x:Name="control5">
<local:MyControl x:Name="control6">
<local:MyControl x:Name="control7"/>
</local:MyControl>
</local:MyControl>
</local:MyControl>
</local:MyControl>
</local:MyControl>
</local:MyControl>
我遇到的问题是,只有第一个实例称为root
,其他实例是第一个实例的子项。他们甚至可能是彼此的孩子。
这里是MyControl类的代码:
[ContentProperty("MyChildren")]
class MyControl : ItemsControl
{
public List<MyControl> MyChildren
{
get { return (List<MyControl>)GetValue(MyChildrenProperty); }
set { SetValue(MyChildrenProperty, value); }
}
// Using a DependencyProperty as the backing store for Children. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyChildrenProperty =
DependencyProperty.Register("MyChildren", typeof(List<MyControl>), typeof(MyControl), new UIPropertyMetadata(new List<MyControl>()));
}
此代码是我尝试过的,但这不起作用。
如何实现一个可以托管相同类型的子控件的自定义控件,在该控件中可以执行上述示例中的操作?
答案 0 :(得分:1)
你之前没有做任何研究就会问一些事情。我知道我在说什么,因为如果你问谷歌这个,你就会知道wpf中的控件需要在visualtree和/或logicaltree中,而且你还会知道控件不能存储在一个简单的列表中而是在UIElementCollection中管理为您自动添加和删除对visualtree的控制。
请只是谷歌你的问题,你会知道我在说什么。有很多关于如何编写自定义控件的教程。 msdn关于wpf中的自定义控件有很棒的内容。