在.Net 4.0中,以下代码抛出 InvalidOperationException
,消息为"Specified element is already the logical child of another element. Disconnect it first."
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 .
Why no exception? throw
语句似乎仍然出现在.Net 4.5 FrameworkElement.AddLogicalChild
中 . 会导致它被抛出的原因是什么?
我很高兴接受这种行为改变的原因很充分,而且我必须改变我的编码,然而,就目前而言,具有损坏UI的无声失败似乎是从强烈异常后退一步时明显断开连接来自逻辑树的 FrameworkElement
是forgotton .
1 回答
有时孩子有多个逻辑父母是有意义的,例如layout-to-layout animation . 我猜WPF团队认为是时候让开发人员决定何时以及如何使用它而不是禁止它 .