2010-01-20 6 views
6

Y at-il de toute façon qu'une classe peut attraper le dernier clic dans l'application? Quelque chose commeWPF. Attraper la dernière fenêtre cliquer n'importe où

public class MyClickManagerClass 
{ 
    public MyClickManagerClass() 
    { 
     // subscribe to a global click event 
    } 

    private void GlobalClickEventHandler(object sender, EventArgs e) 
    { 
     // do something with the click here 
    } 
} 

Merci pour votre temps!

Répondre

12

Si vous voulez seulement capturer les clics de souris n'importe où dans un Window donné, il suffit de vous abonner au MouseDown ou au PreviewMouseDown au niveau de la fenêtre.

Si vous voulez vraiment être globale à l'application (et pas seulement à la fenêtre), vous devez vous abonner à l'événement InputManager.PreProcessInput ou InputManager.PostProcessInput et surveiller les événements de souris:

public MyClickManagerClass() 
{ 
    InputManager.Current.PreProcessInput += (sender, e) => 
    { 
    if(e.StagingItem.Input is MouseButtonEventArgs) 
     GlobalClickEventHandler(sender, 
     (MouseButtonEventArgs)e.StagingItem.Input); 
    } 
} 

Notez que « l'expéditeur "sera toujours le InputManager, mais vous pouvez mapper les coordonnées à d'autres contrôles avec MouseEventArgs.GetPosition(visual).

+0

Fonctionne très bien! Merci! Une seule note, c'est: InputManager.Current.PreProcessInput – Carlo

+0

Merci. J'ai corrigé le code dans ma réponse. –