views:

69

answers:

2

Hi,

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,

A: 

There is an Unloaded event on System.Windows.Controls.Control, but I don't know an elegant way to stop unloading the control with it.

andyp
yea..i know about the unloaded event but depending on certain conditions I need to stop it from being unloaded...
guest
Does it have to be a UserControl? Or could you use a modal dialog which doesn't close if certain conditions aren't met?
andyp
A: 

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.

Rob Perkins