2012-11-05 15 views
7

Szukam przechwycenia każdego kliknięcia myszy w mojej aplikacji WPF. Wydaje się, że to powinno być łatwe dzięki mechanizmowi routingu poleceń, ale przykro mi, że nic nie znajduję.Przechwytywanie każdego kliknięcia myszy do aplikacji WPF

Moja aplikacja implementuje kilka poziomów zabezpieczeń i ma wymóg automatycznego powrotu do najbardziej restrykcyjnego poziomu, jeśli nikt nie wchodzi w interakcję (kliknie) aplikacji w ciągu x minut. Moim planem jest dodanie timera, który wygasa po x minutach i dostosuje poziom bezpieczeństwa. Każde kliknięcie myszą w aplikację spowoduje zresetowanie licznika czasu.

+1

Zakładam, że nie ma szans, że będą szczęśliwie odpisywać i zablokować aplikację, ponieważ nie używają myszy? – Ian

+0

Przepraszam, wszyscy, za opóźnienie ... pracowali w ten poniedziałkowy poranek, ale zostałem zatrzymany na czymś innym. Dziękuję bardzo za szybkie odpowiedzi, wrócę do tego wkrótce – nmarler

Odpowiedz

16

można zarejestrować obsługi klasy:

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

To będzie obsługiwać dowolną imprezę PreviewMouseDown na każde okno utworzone w aplikacji.

+0

Wow, zajęło mi dużo czasu, aby wrócić do tego, ale w końcu znalazłem czas. @baboon wspaniała sugestia, aby zarejestrować się raz i zapomnieć o tym - działa świetnie. Dziękuję Ci – nmarler

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

To powinno działać dla Ciebie.

Ta funkcja uruchamia się, nawet jeśli inne zdarzenia MouseDown są wywoływane w przypadku składników, które zawiera.

Zgodnie z sugestią Clemensa w komentarzach, PreviewMouseDown jest lepszym wyborem niż MouseDown, ponieważ zapewnia to, że nie można powstrzymać bulgotania od zdarzenia w innym wydarzeniu.

+2

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

+0

Bardzo dobry punkt. :) –

+1

Korzystanie z bąbelkowego wydarzenia zawsze będzie złym pomysłem w jego przypadku, ponieważ wiele kontrolek może obsłużyć te zdarzenia. używanie tunelowej wersji (PreviewMouseDown) jest lepszym pomysłem. Edycja: Ups, nie wystarczająco szybko :) Poza tym, wydaje się, że sposób, aby przejść ode mnie :) – Sisyphe

Powiązane problemy