2009-02-05 36 views
4

我已經寫了一個基於Control的自定義Silverlight控件。我有兩個名爲Top和Bottom的DependencyProperties,它們都包含特定佈局顯示的子控件。然後,我使用ControlTemplate將這兩個控件排列成一個網格,其中一個放置在第0行,另一個放置在第1行。我遇到的問題是,我似乎無法弄清楚如何讓每個子控件的Parent屬性指向我的自定義控件。當我在運行時檢查每個控件時,每個控件的Parent屬性都爲null。如何在Silverlight中設置FrameworkElement的Parent屬性?

這是一個簡單的例子,但我認爲你可以看到一般問題。我有一些更復雜的控制,都分享這個問題。我知道我缺少一些魔法。如果一個ContentControl的Content屬性設置爲某個孩子,它會以某種方式將該孩子的父母設置爲自己。

編輯:多一點信息

在WPF,一個可能使用功能,如AddVisualChild(),RemoveVisualChild(),AddLogicalChild(),RemoveLogicChild()來管理父/子關係,但這些功能在Silverlight中不可用。

回答

4

經過相當多的研究,我認爲這是不可能的。我使用VisualTreeHelper能夠通過可視化樹而不是邏輯樹遞歸來實現我的最終目標。

+1

正確。在創建可視化樹時,父級由表示框架自己設置。 – 2009-08-30 18:48:13

1

Parent屬性不能是任意的,它反映了渲染時使用的控件的真正父對象。

來自MSDN: 如果元素已實例化但未附加到最終連接到頁級別根元素或應用程序對象的任何邏輯樹,父級可能是空引用(在Visual Basic中爲Nothing) 。

...

改變一個元素的父通常通過集合的操縱,或者通過設定元件的內容特性時進行,通過使用專用添加或刪除的方法。

+0

沒錯。因此,在編寫自定義控件時,如何通過設置Content屬性或在Children集合中將某個元素添加爲子元素來複制該操作? – 2009-02-05 20:58:24