So, I have a class, which goes as follows:
public class EditorUserControl : UserControl
{
    public EditorUserControl()
        : base()
    {
        this.IsVisibleChanged += new DependencyPropertyChangedEventHandler(
            EditorUserControl_IsVisibleChanged);
    }
    void EditorUserControl_IsVisibleChanged(
        object sender, 
        DependencyPropertyChangedEventArgs e)
    {
        if (IsEditing && !((bool)e.NewValue))
        {
            PressedButton pressedButton = PromptUser(new Buttons[] { 
                "Save changes to the object you just edited?",
                Buttons.Yes, 
                Buttons.No, 
                Buttons.Cancel });
            if(pressedButton == Buttons.Cancel)
            {
                CANCELTHETHING();
            }
        }
    }
}
In words - this class is a base for all entity editing controls and when it goes invisible (e.g. window is closed, tab changed etc.) I need to check if the user has made changes and prompt the user whether to save/discard/cancel. The save/discard are easy. The problem is with the third option (and it must be there) - I cannot figure out a way how could I cancel the source event that caused the visibility to change (as there is no way to get to that actual event). Is there a better way to do this functionality (that would not require signing up for all of the possible sources of events)?