"using Focus() or Activate() on Window2 doesn't help" - in WPF certain actions needs to be queued via Dispatcher, calling those directly at inappropriate time simply won't work. Try to play with dispatcher priority (second parameter) in
Application.Current.Dispatcher.InvokeAsync(() => ... code to activate ... );
when you are trying to activate another window from either close event or where you close it.