Изменилось ли поведение WPF 4.5 parent-child: теперь мы можем добавить дочерний элемент к другому без исключения родителю?

В.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 из логического дерева было забыто.

1 ответ

Бывают случаи, когда для ребенка имеет смысл иметь более одного логического родителя, например, при анимации макета в макет. Я предполагаю, что команда WPF решила, что пришло время позволить разработчикам решать, когда и как использовать это вместо того, чтобы запретить это.

Другие вопросы по тегам