60 votes

Reportez-vous à la fenêtre active dans WPF?

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?

106voto

Aviad P. Points 9351

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.

24voto

ghord Points 2842

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();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X