如何链接容器及其内容?

时间:2010-11-04 16:47:12

标签: wpf xaml wpf-controls

我有一个基于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>

1 个答案:

答案 0 :(得分:0)

您可以将属性MyControls添加到MyContainer类,为MyContainer创建一个模板,其中包含一个列表(ItemsControlListBox或其他一些列表控制),将列表本身放在示例代码的网格中,将列表的ItemsSource绑定到MyControls属性。

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

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

附加属性绝对没必要。