难道WPF 4.5亲子行为改变:我们现在可以将孩子添加到另一个父无异常?(Did WPF 4.5 p

2019-07-31 09:28发布

在.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 。 什么会导致它被甩不?

我很高兴接受的行为改变了一个很好的理由,我不得不改变我的编码,但是,因为它代表,沉默的失败,腐败的UI看起来像强异常一种倒退时的明确断开FrameworkElement从逻辑树福尔戈。

Answer 1:

有些时候,它是有道理的孩子有一个以上的逻辑父,例如在布局对布局动画 。 我猜WPF团队决定是时候让开发者决定何时以及如何使用它来代替它禁止。



文章来源: Did WPF 4.5 parent-child behavior change: we can now add a child to another parent without exception?