1

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

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

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

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

4

1 回答 1

1

你在问一些事情之前没有做任何研究。我知道我在说什么,因为如果您向 google 询问过这个问题,您会知道 wpf 中的控件需要位于 visualtree 和/或logicaltree 中,而且您会在某个地方读到控件不应存储在简单列表中而是在 UIElementCollection 中,它自动为您管理在可视化树中添加和删除控件。

请用谷歌搜索你的问题,你就会知道我在说什么。有大量关于如何编写自定义控件的教程。关于 wpf 中的自定义控件,msdn 上有很棒的 tuts。

于 2013-11-12T18:35:13.687 回答