Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In wpf, is there a way to execute code before the control is unloaded...? like maybe an unloading event?

I need to execute code before a wpf user control is unloaded and cancel the unloading if certain conditions are met and keep the control open in its current state in the ui...

Is there any way I can accomplish this? I couldnt see anything like unloading event? Thanks,

like image 235
guest Avatar asked Jul 13 '10 20:07

guest


1 Answers

Unloaded is fired when the control is removed from the WPF visual tree. As far as I've been able to read there is no "Unloading" event as there is, I think, in Windows Forms. But, "Unloaded" doesn't mean that the control is destroyed, just that it's removed from the visual tree.

Keep a reference to the control in a separate place in your code, along with a little bit of metadata about its parent control. You can probably collect that metadata by storing a reference to the Parent property in your Initialized event handler.

Then, when Unloaded is called, make your tests in the Unloaded event handler, and if your conditions are met, re-insert the control into the logical tree. The ContentControl class has an explicit AddChild protected method you could call.

There are probably some side effects to watch out for; According to the documentation, Unloaded is called when themes are changed at the OS level, when the WPF visual tree reconstitutes itself.

like image 89
Rob Perkins Avatar answered Nov 16 '22 05:11

Rob Perkins