2010-11-04 103 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的綁定。

如果您需要從代碼中找到容器,那麼您應該每次都可以這樣做,或者在第一次使用時緩存該值(可以將控件移動到另一個容器?)。構造器不是合適的地方,因爲第一個控件是創建的,只有它被放入樹中。

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