问题
I want to get mouse position relative to screen coordinates. I am using the following code to do that.
window.PointToScreen(Mouse.GetPosition(window));
It is working as expected. But my MouseMove event not firing outside the MainWindow. That is if I move my mouse over desktop with my window restored.
Any ideas appreciated.
回答1:
Use the CaptureMouse() method.
For your example above, you could add:
window.CaptureMouse();
in your code-behind inside the MouseDown event handler.
You then need to call:
window.ReleaseMouseCapture();
in your code-behind inside the MouseUp event handler.
回答2:
I needed to be able to capture mouse position outside of the WPF window regardless of any mouse button pressed. I ended up using Interop to call a WINAPI GetCursorPos combined with a thread instead of an event for the window.
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();
}
}
Works great!
来源:https://stackoverflow.com/questions/10330452/mouse-move-not-trigger-outside-wpf-main-window