В wpf есть ли способ выполнить код до того, как элемент управления будет выгружен ...?как может быть событие разгрузки? - PullRequest
4 голосов
/ 14 июля 2010

Мне нужно выполнить код до того, как пользовательский элемент управления wpf будет выгружен, и отменить выгрузку, если соблюдены определенные условия, и оставить элемент управления открытым в его текущем состоянии в пользовательском интерфейсе ...

Есть ли способ, которым я могуможет сделать это?Я не мог видеть что-то вроде разгрузки события?Спасибо,

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

Unloaded запускается, когда элемент управления удален из визуального дерева WPF. Насколько я смог прочитать, события "Unloading" нет, как, я думаю, в Windows Forms. Но «Unloaded» не означает, что элемент управления уничтожен, просто он удален из визуального дерева.

Храните ссылку на элемент управления в отдельном месте в вашем коде вместе с небольшим количеством метаданных о его родительском элементе управления. Вероятно, вы можете собрать эти метаданные, сохранив ссылку на свойство Parent в обработчике событий Initialized.

Затем, когда вызывается Unloaded, проведите тесты в обработчике событий Unloaded и, если ваши условия выполнены, повторно вставьте элемент управления в логическое дерево. Класс ContentControl имеет явный защищенный метод AddChild, который вы можете вызвать.

Возможно, есть некоторые побочные эффекты, на которые стоит обратить внимание; Согласно документации, Unloaded вызывается, когда темы изменяются на уровне ОС, когда визуальное дерево WPF восстанавливается.

0 голосов
/ 29 апреля 2015
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
     if (ConditionsMet) { e.Handled = true; }
}

Если для ConditionMet событие Unloaded будет установлено значение true, отныне сохраняя свой элемент управления в VisualTree - он не будет выгружен

0 голосов
/ 14 июля 2010

В System.Windows.Controls.Control есть событие Unloaded , но я не знаю элегантного способа прекратить выгрузку элемента управления с его помощью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...