В .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 не вызывает никаких исключений. Это, по-видимому, приводит к тому, что визуальное дерево имеет какое-то странное состояние, которое отображается как неправильный пользовательский интерфейс.
Почему исключение? Оператор throw
по-прежнему присутствует в .Net 4.5 FrameworkElement.AddLogicalChild
. Что может быть причиной его отказа?
Я рад принять, что поведение изменилось по уважительной причине, и я должен изменить свое кодирование, однако, поскольку оно стоит, молчащий сбой с поврежденным пользовательским интерфейсом выглядит как шаг назад от сильного исключения, когда явный отключение FrameworkElement
от логического дерева было забыто.