Я преобразующего UserControl
из формы Windows к WPF, Вот мой Windows Formрабочий код:WPF Intercept движения глобальной мыши (как с помощью IMessageFilter в форме Windows)
GlobalMouseHandler mouseHandler = new GlobalMouseHandler();
mouseHandler.MouseMove += OnGlobalMouseMove;
mouseHandler.MouseButtonUp += OnGlobalMouseButtonUp;
public class GlobalMouseHandler : IMessageFilter, IDisposable
{
public event MouseMovedEvent MouseMove;
public event MouseButtonUpEvent MouseButtonUp;
public GlobalMouseHandler(){
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m)
{
switch (m.Msg)
{
case WM_MOUSEMOVE:
MouseMove?.Invoke();
break;
case WM_LBUTTONUP:
MouseButtonUp?.Invoke();
break;
}
return false;
}
}
I использовал IMessageFilter
, чтобы заставить мыши перемещаться и вызывать события в приложении и присоединяться к ним.
Теперь я знаю, что IMessageFilter is not available in WPF, но есть ли простой способ записи этих простых событий мыши в WPF?
Спасибо за быстрый ответ! У меня проблема: я не загружаю окно, а общий UserControl (System.Windows.Controls), поэтому я не могу передать окно в конструктор WindowInteropHelper. Есть ли способ использовать «текущее главное окно» или что-то в этом роде? – Rowandish
Да, вы можете попробовать 'Window.GetWindow (this)' изнутри 'UserControl' – Sam