public virtual IDisposable ShowDialog() { var disabled = s_instances.Where(x => x != this && x.IsEnabled).ToList(); TopLevel activated = null; foreach (var window in disabled) { if (window._owner.IsActive) { activated = window._owner; } window.IsEnabled = false; } Show(); return(Disposable.Create(() => { foreach (var window in disabled) { window.IsEnabled = true; } if (activated != null) { activated.Activate(); } })); }