2012-04-05 105 views

回答

9

在你的應用程序類(App.cs)註冊一個全局事件處理程序,如下所示:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(Window_KeyDown)); 
    } 

    void Window_KeyDown(object sender, RoutedEventArgs e) 
    { 
     // your code here 
    } 
} 

在您的應用程序這將處理KeyDown事件的任何Window。您可以將e轉換爲KeyEventArgs以獲取有關按下按鍵的信息。

+0

謝謝方向,我看到這一次,它有一些與註冊處理程序和東西。生病嘗試這一點,並報告 – Programer 2012-04-05 11:06:39

+0

實際上,而不是鑄造,你可以用'新的KeyEventHandler(Window_KeyDown)'替換'new RoutedEventHandler(..)'' – BatteryBackupUnit 2015-07-21 13:51:10

0

您應該使用委託來連接事件(無論它在哪裏)和事件跳轉時您願意工作的函數。

您可以根據需要爲您的代理裝入儘可能多的事件。

mzE。

+1

您能不能給一個代碼? – Programer 2012-04-05 10:58:12

0

那麼,KeyDown只能在當前窗口中使用,因爲您需要關注KeyDown。你可以做的是向所有窗口添加一個處理程序,並在這些處理程序中分派另一個事件,然後在這個新事件中註冊所需的所有類。

或者,看看在Observer模式

+0

我曾經發生過......我不記得我是如何複製它的,我現在找不到的地方 – Programer 2012-04-05 10:57:29

0

你不能。
Eighter在所有窗口中註冊事件並將其傳遞給全局函數/事件或(在keydown或類似情況下)使用某種全局「事件捕捉」(如鍵盤的THIS)。

+0

我曾經發生過這種事......我不記得我是如何複製它的,我現在找不到的地方 – Programer 2012-04-05 10:57:12

3

如何:

public partial class App : Application { 
     protected override void OnStartup(StartupEventArgs e) { 
      EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(KeyDown)); 
      base.OnStartup(e); 
     } 

     void KeyDown(object sender, RoutedEventArgs e) { 

     } 
    } 
相關問題