Перемещение мыши не запускается за пределами главного окна WPF
Я хочу получить положение мыши относительно координат экрана. Я использую следующий код, чтобы сделать это.
window.PointToScreen(Mouse.GetPosition(window));
Это работает, как ожидалось. Но мое событие MouseMove не запускается вне MainWindow. Это если я наведу курсор мыши на рабочий стол с восстановленным окном.
Любые идеи приветствуются.
2 ответа
Решение
Используйте метод CaptureMouse().
Для вашего примера выше, вы можете добавить:
window.CaptureMouse();
в вашем коде позади обработчика событий MouseDown.
Затем вам нужно позвонить:
window.ReleaseMouseCapture();
в вашем коде позади обработчика событий MouseUp.
Мне нужно было иметь возможность фиксировать положение мыши вне окна WPF независимо от нажатой кнопки мыши. В конечном итоге я использовал Interop для вызова WINAPI GetCursorPos в сочетании с потоком вместо события для окна.
using System.Runtime.InteropServices;
using Point = System.Drawing.Point;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(ref Point lpPoint);
public MainWindow()
{
InitializeComponent();
new Thread(() =>
{
while (true)
{
//Logic
Point p = new Point();
GetCursorPos(ref p);
//Update UI
Dispatcher.BeginInvoke(new Action(() =>
{
Position.Text = p.X + ", " + p.Y;
}));
Thread.Sleep(100);
}
}).Start();
}
}
Работает отлично!