Wpf 如何链接容器及其内容?

Wpf 如何链接容器及其内容?,wpf,xaml,wpf-controls,Wpf,Xaml,Wpf Controls,我有一个基于ContentControl类型的对象,我想将自定义控件嵌入到它的内容中。下面是代码 问题是我需要MyContainer有一个MyControl对象的列表,这样它就可以与它们通信,而每个MyControl都需要一个对其MyContainer的引用 如何正确地做到这一点?我看到的一种方法是在MyControl上声明一个附加属性,并将其设置为MyContainer对象的名称,但这似乎是多余的,因为MyControl对象可以搜索可视树来查找容器。如果搜索是正确的方法,我将把执行搜索的代码放

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

问题是我需要MyContainer有一个MyControl对象的列表,这样它就可以与它们通信,而每个MyControl都需要一个对其MyContainer的引用

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

谢谢你的意见 康斯坦丁


public class MyContainer : ContentControl
{
...
}

public class MyConrol : Control
{
...
}
您可以将属性MyControls添加到MyContainer类,为MyContainer创建一个模板,其中包含一个列表ItemsControl、ListBox或其他一些列表控件,从示例代码将列表本身放入网格中,将列表的ItemsSource绑定到MyControls属性

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

如果您需要从代码中查找容器,您可能应该每次都这样做,或者缓存第一次使用时的值。是否可以将控件移动到另一个容器?。构造函数不是合适的位置,因为首先创建控件,然后才将其放入树中

附加属性绝对是不必要的


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