2010-11-04 109 views
1

我有一个基于ContentControl类型的对象,我想将自定义控件嵌入到它的内容中。下面是代码。如何链接容器及其内容?

问题是我需要MyContainer有一个MyControl对象列表,以便它可以与他们沟通,并且每个MyControl都需要对其MyContainer的引用。

这是如何正确完成的?我看到的一种方法是在MyControl上声明一个附加属性并将其设置为MyContainer对象的名称,但这似乎是多余的,因为MyCOntrol对象可以搜索可视化树来查找容器。如果搜索是做到这一点的正确方法,我会在哪里放置执行搜索的代码?在MyControl构造函数中?

感谢任何输入 康斯坦丁


public class MyContainer : ContentControl 
{ 
... 
} 

public class MyConrol : Control 
{ 
... 
} 

<c:MyContainer> 
    <Grid> 
    <c:MyControl /> 
    </Grid> 
</c:MyContainer> 

回答

0

您可以添加属性MyControlsMyContainer类,创建MyContainer模板与它(ItemsControlListBox或其他一些列表控件)的列表,将列表本身放入您的示例代码的网格中,将列表的ItemsSource绑定到MyControls属性。

要在XAML中获取控件的容器,可以使用将RelativeSource设置为FindAncestor的绑定。

如果您需要从代码中找到容器,那么您应该每次都可以这样做,或者在第一次使用时缓存该值(可以将控件移动到另一个容器?)。构造器不是合适的地方,因为第一个控件是创建的,只有它被放入树中。

附加属性肯定是不必要的。