Я должен выполнить код, прежде чем wpf пользовательский элемент управления будет разгружен, и отмените разгрузку, если определенные условия соблюдены и удерживают контроль открытый в ее текущем состоянии в ui...
Есть ли какой-либо способ, которым я могу выполнить это? Я не мог видеть ничего как разгрузка события?Спасибо,
Unloaded
запускается, когда элемент управления удаляется из визуального дерева WPF. Насколько я смог прочитать, события «Выгрузка» не существует, как я думаю, в Windows Forms. Но «Выгружено» не означает, что элемент управления уничтожен, он просто удаляется из визуального дерева.
Храните ссылку на элемент управления в отдельном месте кода вместе с небольшими метаданными о его родительском элементе управления. Вероятно, вы можете собрать эти метаданные, сохранив ссылку на свойство Parent
в обработчике событий Initialized
.
Затем, когда вызывается Unloaded
, выполните свои тесты в обработчике событий Unloaded
и, если ваши условия соблюдены, повторно вставьте элемент управления в логическое дерево. Класс ContentControl
имеет явный защищенный метод AddChild
, который вы можете вызвать.
Вероятно, есть побочные эффекты, которых следует остерегаться; Согласно документации, Unloaded
вызывается, когда темы изменяются на уровне ОС, когда визуальное дерево WPF восстанавливается.
Существует событие Unloaded на System.Windows.Controls.Control, но я не знаю элегантного способа остановить выгрузку элемента управления с его помощью.