WPF自定义控件与相同类型的子项

时间:2013-11-12 16:39:38

标签: c# wpf controls children

我正在尝试实现自己的控件,它可以托管一个或多个与控件本身相同类型的子项:

<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>()));
}

此代码是我尝试过的,但这不起作用。

如何实现一个可以托管相同类型的子控件的自定义控件,在该控件中可以执行上述示例中的操作?

1 个答案:

答案 0 :(得分:1)

你之前没有做任何研究就会问一些事情。我知道我在说什么,因为如果你问谷歌这个,你就会知道wpf中的控件需要在visualtree和/或logicaltree中,而且你还会知道控件不能存储在一个简单的列表中而是在UIElementCollection中管理为您自动添加和删除对visualtree的控制。

请只是谷歌你的问题,你会知道我在说什么。有很多关于如何编写自定义控件的教程。 msdn关于wpf中的自定义控件有很棒的内容。