Comment puis-je faire référence à une fenêtre active d'application WPF en C #, en utilisant quelque chose comme la propriété ActiveForm dans WinForms?
Réponses
Trop de publicités? Une solution possible serait d’analyser la liste des fenêtres ouvertes dans l’application et de vérifier laquelle d’entre elles possède IsActive = true
:
Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
Vous ne savez pas s'il peut y avoir plus d'une fenêtre active si, par exemple, une boîte de dialogue modale s'affiche, auquel cas le propriétaire de la boîte de dialogue et la boîte de dialogue elle-même sont peut-être actives.
Il y a une meilleure façon de faire cela en utilisant PInvoke. La réponse d'Aviads ne fonctionne pas tout le temps (il y a quelques cas de bord avec des dialogues).
IntPtr active = GetActiveWindow();
ActiveWindow = Application.Current.Windows.OfType<Window>()
.SingleOrDefault(window => new WindowInteropHelper(window).Handle == active);
Il faut d'abord inclure l'importation suivante:
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();