How to get mouse position on screen in WPF?

Ziya Ceferov picture Ziya Ceferov · Apr 23, 2015 · Viewed 38.2k times · Source

It works within a specific control, but it doesn't work out the specific control.

How to get mouse position and use mouse events independently of any control just directly from screen (without Platform Invoke)?

2 needed points:

  1. Mouse events when mouse is not within a control, but on a screen.
  2. Mouse position when mouse is not within a control, but on a screen.

It should be solved without using Platform Invoke.

Next two don't work:

System.Windows.Input.Mouse.GetPosition(this)

Doesn't get mouse position out a specific control.

System.Windows.Forms.Cursor.Position.X

System.Windows.Forms.Cursor.Position doesn't work because it has no types in a WPF app, but it works in a Windows Forms app.

IntelliSense gets System.Windows.Forms.Cursor.Position, but it doesn't get any type of Position, hence I can't get:

Position.X    
Position.Y

and

Point pointToWindow = Mouse.GetPosition(this);

Point pointToScreen = PointToScreen(pointToWindow);

Doesn't get mouse position out a specific control.

Answer

Hossein Narimani Rad picture Hossein Narimani Rad · Apr 23, 2015

Using MouseDown event of a control you can try this:

var point = e.GetPosition(this.YourControl);

EDIT: You can capture mouse event to a specific control using Mouse.Capture(YourControl); so it will capture the mouse events even if it is not on that control. Here is the link