2012-11-05 11 views
7

Sto cercando di intercettare tutti i clic del mouse nella mia applicazione WPF. Sembra che questo dovrebbe essere facile con il meccanismo di routing dei comandi, ma mi dispiace non sto trovando nulla.Intercetta ogni clic del mouse sull'applicazione WPF

La mia applicazione implementa diversi livelli di sicurezza e ha l'esigenza di ripristinare automaticamente il livello più restrittivo se nessuno interagisce con (fa clic) l'applicazione in x minuti. Il mio piano è quello di aggiungere un timer che scade dopo x minuti e regola il livello di sicurezza. Ogni clic del mouse nell'applicazione resetterà il timer.

+1

Suppongo che non ci siano possibilità che digiteranno volentieri e che il blocco dell'applicazione li blocchi perché non hanno usato il mouse? – Ian

+0

Scusate, tutti, per il ritardo ... stava lavorando a questo lunedì mattina, ma è stato portato su qualcos'altro. Grazie mille per le risposte rapide, torneremo presto a questo – nmarler

risposta

16

È possibile registrare un gestore di classe:

public partial class App : Application 
    { 
     protected override void OnStartup(StartupEventArgs e) 
     { 
      EventManager.RegisterClassHandler(typeof(Window), Window.PreviewMouseDownEvent, new MouseButtonEventHandler(OnPreviewMouseDown)); 

      base.OnStartup(e); 
     } 

     static void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) 
     { 
      Trace.WriteLine("Clicked!!"); 
     } 
    } 

questo modo di gestire qualsiasi PreviewMouseDown evento su qualsiasi finestra creata nell'applicazione.

+0

Wow, mi ci è voluto molto tempo per tornare a questo, ma finalmente ho trovato il tempo. @baboon ottimo suggerimento per registrarti una volta e dimenticartene - sta funzionando alla grande. Grazie – nmarler

1
<Window .... PreviewMouseDown="Window_PreviewMouseDown_1"> 
</Window> 

Questo dovrebbe funzionare per voi.

Questo incendio anche se altri eventi MouseDown si attivano per i componenti in esso contenuti.

Come da suggerimento di Clemens nei commenti, PreviewMouseDown è una scelta migliore di MouseDown, in quanto ciò assicura che non è possibile interrompere l'evento che bolle in un evento diverso.

+2

Forse dovrebbe essere [PreviewMouseDown] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.previewmousedown.aspx). – Clemens

+0

Ottimo punto. :) –

+1

L'utilizzo di un evento spumeggiante sarà sempre una cattiva idea nel suo caso, poiché molti controlli potrebbero gestire questi eventi. usare la versione tunneled (PreviewMouseDown) è un'idea migliore. Edit: Oops, non abbastanza veloce :) A parte questo, questo sembra il modo di andare da me :) – Sisyphe

Problemi correlati