2012-11-05 37 views
7

我正在尋找攔截我的WPF應用程序中的每一個鼠標點擊。似乎這應該很容易與命令路由機制,但對不起,我沒有找到任何東西。攔截每一個鼠標點擊WPF應用程序

我的應用程序實現了多個安全級別,並且如果沒有人在x分鐘內與應用程序進行交互(點擊),則需要自動恢復到最嚴格的級別。我的計劃是添加一個計時器,在x分鐘後過期並調整安全級別。每次點擊進入應用程序的鼠標都會重置計時器。

+1

我想他們沒有機會愉快地打字,並有應用程序鎖定他們,因爲他們沒有使用鼠標? – Ian

+0

對不起,大家對於這個延遲......這個星期一早上正在工作,但被拉到別的地方。非常感謝您的快速回復,請儘快回覆此問題 – nmarler

回答

16

您可以註冊類處理程序:

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

這將處理在應用程序中創建的任何窗口中的任何PreviewMouseDown事件。

+0

哇,花了很長時間回到這個,但我終於找到了時間。 @baboon偉大的建議一次註冊並忘記它 - 它的工作很棒。謝謝 – nmarler

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

這應該適合你。

即使其他MouseDown事件觸發其包含的組件,也會觸發此事件。

根據Clemens在意見中的建議,PreviewMouseDown是比MouseDown更好的選擇,因爲這可以確保您不會阻止事件在不同事件中冒泡。

+2

也許應該是[PreviewMouseDown](http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.previewmousedown.aspx)。 – Clemens

+0

非常好的一點。 :) –

+1

在他的情況下使用冒泡事件總是一個壞主意,因爲許多控件可能會處理這些事件。使用隧道版本(PreviewMouseDown)是一個更好的主意。編輯:哎呀,速度不夠快:)除此之外,這看起來像是我去的方式:) – Sisyphe