.net – WPF 4.5父子行为发生变化:现在我们现在可以将一个小孩添加到另一个父对象吗?

在.Net 4.0中,以下代码抛出一个InvalidOperationException,并带有消息“指定的元素已经是另一个元素的逻辑小孩,先断开连接.

var parent = new System.Windows.Controls.ContentControl();
var child = new System.Windows.Controls.Button();

parent.Content = child;

var parent2 = new System.Windows.Controls.ContentControl();
parent2.Content = child;    // throws InvalidOperationException in .Net 4.0, not in 4.5

但是,在安装了.Net 4.5的机器上运行此代码不会抛出异常.这似乎导致视觉树有一些奇怪的状态,显示为不正确的UI.

为什么不例外? throw语句似乎仍然存在于.Net 4.5 FrameworkElement.AddLogicalChild中.什么会导致它不被抛出?

我很高兴接受这种行为改变了一个很好的理由,而且我必须改变我的编码,但是,就像现在一样,无声的失败与腐败的用户界面似乎是一个从强大的例外的一个步骤,当显式断开一个来自逻辑树的FrameworkElement被忘记了.

有时候,孩子有一个以上的逻辑父母是有道理的,例如在layout-to-layout animation年.我猜WPF团队决定是时候让开发人员决定何时以及如何使用这个而不是禁止它.
翻译自:https://stackoverflow.com/questions/12270603/did-wpf-4-5-parent-child-behavior-change-we-can-now-add-a-child-to-another-pare

转载注明原文:.net – WPF 4.5父子行为发生变化:现在我们现在可以将一个小孩添加到另一个父对象吗?