2012-04-26 10 views
5

Desidero ottenere la posizione del mouse relativa alle coordinate dello schermo. Sto usando il seguente codice per farlo.Mouse Move not trigger outside WPF Finestra principale

window.PointToScreen(Mouse.GetPosition(window)); 

Funziona come previsto. Ma il mio evento MouseMove non si attiva all'esterno di MainWindow. Cioè se si sposta il mouse sul desktop con la mia finestra ripristinata.

Qualsiasi idea apprezzata.

risposta

8

Utilizzare il metodo CaptureMouse().

Per il vostro esempio di cui sopra, si potrebbe aggiungere:

window.CaptureMouse(); 

nel code-behind all'interno del gestore di eventi MouseDown.

È quindi necessario chiamare:

window.ReleaseMouseCapture(); 

nel code-behind all'interno del gestore di eventi MouseUp.

+0

Molto utile! grazie – DevEstacion

1

Avevo bisogno di essere in grado di catturare la posizione del mouse al di fuori della finestra WPF indipendentemente dal pulsante del mouse premuto. Ho finito per utilizzare Interop per chiamare un GetCursorPos WINAPI combinato con una discussione anziché un evento per la finestra.

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(); 
    } 
} 

Funziona alla grande!

+0

UI è bloccato ... – pix

+0

Oops sorry I Sleep (0) è ovvio errore, cambialo in qualcos'altro come 100, a seconda del tuo aggiornamento – Peheje

Problemi correlati