WPF. Поймать последнее окно, щелкните в любом месте - PullRequest
6 голосов
/ 21 января 2010

Есть ли какой-нибудь класс, который может поймать последний щелчок в приложении? Что-то вроде

public class MyClickManagerClass
{
    public MyClickManagerClass()
    {
        // subscribe to a global click event
    }

    private void GlobalClickEventHandler(object sender, EventArgs e)
    {
        // do something with the click here
    }
}

Спасибо за ваше время!

1 Ответ

12 голосов
/ 21 января 2010

Если вам нужно только захватывать щелчки мышью в любом месте заданного Window, просто подписка на MouseDown или PreviewMouseDown на уровне окна делает свое дело.

Если вы действительно хотите, чтобы он был глобальным для приложения (а не только для окна), вам следует подписаться на событие InputManager.PreProcessInput или InputManager.PostProcessInput и следить за событиями мыши:

public MyClickManagerClass()
{
  InputManager.Current.PreProcessInput += (sender, e) =>
  {
    if(e.StagingItem.Input is MouseButtonEventArgs)
      GlobalClickEventHandler(sender,
        (MouseButtonEventArgs)e.StagingItem.Input);
  }
}

Обратите внимание, что "отправитель" всегда будет InputManager, но вы можете сопоставить координаты с другими элементами управления с помощью MouseEventArgs.GetPosition(visual).

...