如何在Silverlight中设置FrameworkElement的Parent属性?

时间:2009-02-05 20:45:59

标签: c# .net silverlight silverlight-2.0

我编写了一个基于Control的自定义Silverlight控件。我有两个名为Top和Bottom的DependencyProperties,它们都为特定的布局显示保存子控件。然后我使用ControlTemplate将这两个控件排列成一个网格,将一个放在0行,另一个放在1行。我遇到的问题是我似乎无法弄清楚如何让每个子控件的Parent属性指向我的自定义控件。当我在运行时检查每个控件时,每个控件的Parent属性为null。

这是一个简单的例子,但我认为你可以看到一般问题。我有许多更复杂的控件都可以分享这个问题。我知道我失踪了一些魔力。如果将ContentControl的Content属性设置为某个子节点,则会以某种方式将该子节点的父节点设置为自身。

修改:多一点信息

在WPF中,可以使用AddVisualChild(),RemoveVisualChild(),AddLogicalChild(),RemoveLogicChild()等函数来管理父/子关系,但这些函数在Silverlight中不可用。

2 个答案:

答案 0 :(得分:4)

经过相当多的研究后,我认为这是不可能的。我能够使用VisualTreeHelper通过Visual Tree而不是Logic Tree来实现我的最终目标。

答案 1 :(得分:1)

Parent属性不能是任意的,它反映了渲染时使用的控件的真实父级。

来自MSDN: 在实例化元素但未附加到最终连接到页面级根元素或应用程序对象的任何逻辑树的情况下,Parent可以是空引用(在Visual Basic中为Nothing)。

...

更改元素的父级通常只能通过操作集合,使用专用的添加或删除方法,或通过设置元素的内容属性来完成。