WPF 4.5父子行为是否发生了变化:我们现在可以毫无例外地将孩子添加到另一个父母?

cod*_*zen 12 .net wpf .net-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
Run Code Online (Sandbox Code Playgroud)

但是,在运行的机器上的代码,在.NET 4.5安装结果没有异常被抛出.这似乎导致可视树具有一些奇怪的状态,显示为不正确的UI.

为什么没有例外?throw声明似乎仍然存在于.Net 4.5中FrameworkElement.AddLogicalChild.会导致它被抛出的原因是什么?

我很高兴接受这种行为改变的原因很充分,我必须改变我的编码,但是,就目前而言,具有损坏的UI的无声失败似乎是从强烈的异常后退一步,当显式断开连接时 FrameworkElement从逻辑树是forgotton.

Nig*_*haw 3

有时,子级拥有多个逻辑父级是有意义的,例如在布局到布局动画中。我猜测 WPF 团队决定是时候让开发人员决定何时以及如何使用它,而不是禁止它。