Я не верю, что есть способ отличить их в WPF (хотя я не уверен).
Способ, которым я всегда обрабатывал это в WinForms, состоял в том, чтобы создать переменную-член "_Closing", установить для нее значение false и метод "ReallyClose ()", который бы установил для _Closing значение true, а затем вызвать Close. Мой обработчик закрытия затем отменял бы закрытие, если _Closing не был установлен в true.
Да, это что-то вроде хака, но это сработало.