2012-11-05 5 views
7

Ich bin auf der Suche nach jedem Mausklick in meiner WPF-Anwendung abfangen. Scheint, das sollte mit dem Befehl Routing-Mechanismus einfach sein, aber Entschuldigung, ich finde nichts.Abfangen jeden Mausklick auf WPF-Anwendung

Meine Anwendung implementiert mehrere Sicherheitsstufen und muss automatisch auf die restriktivste Stufe zurückgesetzt werden, wenn niemand in x Minuten mit der Anwendung interagiert (klickt). Mein Plan ist es, einen Timer hinzuzufügen, der nach x Minuten abläuft und die Sicherheitsstufe anpasst. Mit jedem Mausklick in die Anwendung wird der Timer zurückgesetzt.

+1

Ich nehme an, dass es keine Chance gibt, dass sie glücklich tippen und die Anwendungssperre haben, weil sie die Maus nicht benutzt haben? – Ian

+0

Entschuldigung, jeder für die Verzögerung ... arbeitete an diesem Montagmorgen, wurde aber auf etwas anderes gezogen. Vielen Dank für schnelle Antworten, werde bald darauf zurückkommen – nmarler

Antwort

16

Sie können einen Klasse-Handler registrieren:

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!!"); 
     } 
    } 

Dieser jedes PreviewMouseDown Ereignis auf jedem Fenster in der Anwendung erstellt behandelt.

+0

Wow, nahm mich eine lange Zeit, um zurück zu diesem aber ich endlich die Zeit gefunden. @baboon großer Vorschlag, sich einmal zu registrieren und es zu vergessen - es funktioniert super. Vielen Dank – nmarler

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

Dies sollte für Sie arbeiten.

Dies wird ausgelöst, selbst wenn andere Ereignisse MouseDown für Komponenten auslösen, die es enthält.

Laut Clemens Vorschlag in den Kommentaren, ist PreviewMouseDown eine bessere Wahl als MouseDown, da dies sicherstellt, dass Sie nicht verhindern können, dass das Ereignis in einem anderen Ereignis auftritt.

+2

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

+0

Sehr guter Punkt. :) –

+1

Die Verwendung eines bubbled-Ereignisses ist in diesem Fall immer eine schlechte Idee, da viele Steuerelemente mit diesen Ereignissen umgehen können. Die Verwendung der getunnelten Version (PreviewMouseDown) ist eine bessere Idee. Edit: Hoppla, nicht schnell genug :) Davon abgesehen, scheint dies der Weg zu sein, von mir zu gehen :) – Sisyphe