2012-04-05 4 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

+0

, а вместо кастинга вы можете просто заменить 'new RoutedEventHandler (..)' на 'new KeyEventHandler (Window_KeyDown)' – BatteryBackupUnit

0

Вы должны использовать делегат, чтобы связать событие (где бы оно ни было) и функцию, которую вы готовы работать при переходе события.

вы можете загрузить столько событий, сколько хотите своему делегату.

mzE.

+1

вы можете дать код? – Programer

0

Ну, KeyDown будет работать только в текущем окне, потому что вам нужен фокус для KeyDown. Что вы можете сделать, это добавить обработчик ко всем окнам и отправить другое событие в этих обработчиках, а затем зарегистрировать все классы, которые вам нужны с этим новым событием.

альтернативно, посмотрите на Observer узор

+0

Я когда-то сделал это ... Я не помню, как я скопировал его, где-то я не могу найти сейчас – Programer

0

Вы не можете.
Eighter вы регистрируете событие во всех окнах и передаете его на глобальную функцию/событие или (в случае смены ключа или аналогичного) вы используете некоторую глобальную «захват событий» (например, THIS для клавиатуры).

+0

Я когда-то это делал ... Я не помню, как я его скопировал, где-то я не могу найти – Programer

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) { 

     } 
    } 
Смежные вопросы