Я не уверен, что это ошибка, но на самом деле есть несколько элементов управления в поведении WPF, подобных этому.
Элементы управления, которые будут повышать Loaded
дважды без Unloaded
:
Когда элементы управления добавляются в визуальное дерево, событие Loaded
будет вызываться для всех его дочерних элементов.И когда ребенок показывает или открывает, событие Loaded
снова поднимется.Когда ребенок закрывается, событие Unloaded
будет инициировано один раз.И когда TabControl
или Popup
был удален из визуального дерева, событие Unloaded
будет вызвано снова.
Когда элемент управления табуляции добавляется в визуальное дерево:
TabControl Loaded
-> TabItem0 Loaded
-> TabItem1 Loaded
->…
Когда вкладка управления изменила вкладку:
Old Active Tab Unloaded
-> New Active Tab Loaded
Это означает, что все TabItem
s будут Loaded
дважды и Unloaded
дважды.
Popup
ведет себя аналогичным образом.
При добавлении всплывающего окна в визуальное дерево:
Popup Loaded
-> Child Loaded
При открытии всплывающего окна:
Когда всплывающее окно закрыто:
Когда всплывающее окно удаленоиз визуального дерева:
Но если всплывающее окно открывается и удаляется из визуального дерева:
Popup Unload
-> Child Unloaded
(Это может быть не очень ожидаемым.)
На самом деле, я считаю, что в WPF есть много ошибок.Я и мои друзья публикуем их на GitHub: