2017-07-04 12 views
2

In UWP versuche ich die Position des Zeigers zu bekommen.C# uwp Zeigerposition

Ich habe es geschafft mit dem nächsten Ereignis zu tun:

private void Grid_PointerMoved(object sender, PointerRoutedEventArgs e) 
    { 
     PointerPoint point = e.GetCurrentPoint(mainGrid); 
     var x = point.Position.X; 
     var y = point.Position.Y; 
    } 

Und mit dieser Art und Weise wird es die ganze Zeit abgefeuert werden. Also brauchte ich etwas Eigentum, um diese Position zu bekommen. Ich habe folgendes gefunden:

var pointerPosition = Windows.UI.Core.CoreWindow.GetForCurrentThread().PointerPosition; 

Aber es gibt nicht immer die richtige Position zurück.

Jede andere Eigenschaft, um die aktuelle Mausposition zu erhalten?

+1

, was Sie unter " Also, ich brauchte etwas Eigentum, um diese Position zu bekommen "? Weil Sie Ihre Mausposition bereits mit der obigen Methode –

+0

haben. Aber es wird jedes Mal ausgelöst, wenn ich meine Maus bewege. – user3239349

+0

Sie möchten also die Zeigerposition, wenn eine bestimmte Funktion aufgerufen wird. Habe ich recht? –

Antwort

1
var pointerPosition = Windows.UI.Core.CoreWindow.GetForCurrentThread().PointerPosition; 

pointerPosition gibt Ihnen die Client-Koordinaten, die die Cursorposition X & Y des Bildschirms sind, nicht relativ zu Ihrem App-Fenster.

So brauchen Sie nur Window.Current.Bounds verwenden, um die Koordinaten Ihres App-Fenster zu finden zuerst, und dann -

var x = pointerPosition.X - Window.Current.Bounds.X; 
var y = pointerPosition.Y - Window.Current.Bounds.Y; 
+0

Auch 'Window.Current.CoreWindow.PointerPosition' sollte Ihnen die gleichen Client-Koordinaten geben. –

+1

Das ist, was ich gesucht habe, danke :) – user3239349

+0

Und weißt du vielleicht, wie man den aktuellen "Halteort" auf dem Handy bekommt, so? – user3239349

0
  1. hinzufügen PointerMoved Event-Handler durch Code

    mainGrid.PointerMoved += mainGrid_PointerMoved; 
    
  2. entfernen PointerMoved Event-Handler in der Event-Handler

    mainGrid.PointerMoved -= mainGrid_PointerMoved; 
    
  3. dann die Zeigerdaten in Event-Handler PointerMoved Get

    var x = e.GetCurrentPoint(mainGrid).Position.X; 
    var y = e.GetCurrentPoint(mainGrid).Position.X; 
    
  4. Hier

ist der gesamte Code

private void GetPointerPosition() 
{ 
    mainGrid.PointerMoved += mainGrid_PointerMoved; 
} 

private void MainStack_PointerMoved(object sender, PointerRoutedEventArgs e) 
{ 
    mainGrid.PointerMoved -= mainGrid_PointerMoved; 
    var x = e.GetCurrentPoint(mainGrid).Position.X; 
    var y = e.GetCurrentPoint(mainGrid).Position.X; 
} 

Erfahren Sie mehr über Adding event handlers in code von hier

0

Dies funktioniert für mich auf meine Leinwand:

var x = e.GetCurrentPoint(canBackArea).Position.X; 
var y = e.GetCurrentPoint(canBackArea).Position.Y;