在 .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 的计算机上运行此代码会导致no抛出异常。这似乎会导致可视化树出现一些奇怪的状态,显示为不正确的 UI。
为什么没有例外? The throw
声明似乎仍然存在于 .Net 4.5 中FrameworkElement.AddLogicalChild
。什么会导致它不被抛出?
我很高兴接受行为改变是有充分理由的,并且我必须更改我的编码,但是,就目前情况而言,UI 损坏的静默失败似乎是从强异常的倒退,当显式断开连接时FrameworkElement
逻辑树中的内容被遗忘了。
有时,一个孩子有多个逻辑父母是有意义的,例如在布局到布局动画 http://www.codeproject.com/Articles/24982/Conceptual-Children-A-powerful-new-concept-in-WPF。我猜测 WPF 团队决定是时候让开发人员决定何时以及如何使用它,而不是禁止它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)