【问题标题】:How is the Parent property of a FrameworkElement set in Silverlight?Silverlight 中如何设置 FrameworkElement 的 Parent 属性?
【发布时间】:2009-02-05 20:45:59
【问题描述】:

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

这是一个简单的示例,但我认为您可以看到一般问题。我有许多更复杂的控件,它们都有这个问题。我知道我缺少一些魔法。如果将 ContentControl 的 Content 属性设置为某个子项,它会以某种方式将该子项的父项设置为自身。

编辑:更多信息

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

【问题讨论】:

    标签: c# .net silverlight silverlight-2.0


    【解决方案1】:

    经过大量研究,我认为这是不可能的。我能够使用VisualTreeHelper 递归通过可视树而不是逻辑树来实现我的最终目标。

    【讨论】:

    • 正确。 Parent 在创建可视化树时由演示框架本身设置。
    • 我觉得将自己的答案标记为正确有点傻,但过了一段时间我还没有看到更好的答案。
    【解决方案2】:

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

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

    ...

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

    【讨论】:

    • 对。因此,当您编写自定义控件时,如何通过设置 Content 属性或将元素添加为 Children 集合中的子元素来复制正在发生的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2011-08-22
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多