2016-04-08 9 views
0

Ich habe Code, der einige Punkte auf dem Bildschirm zeichnet und dann ermöglicht, dass sie gezogen werden, während die linke Maustaste gedrückt wird. Dies funktioniert nur, wenn die Mausereignisse nicht mehr anhalten und der gezogene Punkt aufhört, sich zu bewegen.Mausereignisse für aufgenommenes Element hören auf zu zünden während Ziehen

Da alle Ereignisse aus unbekannten Gründen nicht mehr abgefangen werden, bedeutet dies, dass der Benutzer die linke Maustaste loslassen kann, ohne dass etwas passiert.

Die seltsame Sache ist, dass der Benutzer dann die Maus über den Punkt neu positionieren kann und es wird wieder zu ziehen beginnen, ohne die linke Maustaste gedrückt zu halten. Es sorgt für eine sehr schlechte Benutzererfahrung.

Was ist los?

pinPoint.MouseLeftButtonDown += Point_MouseLeftButtonDown; 
pinPoint.MouseLeftButtonUp += Point_MouseLeftButtonUp; 
pinPoint.MouseMove += Point_MouseMove; 

. 
. 
. 

void Point_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ((UIElement)sender).CaptureMouse(); 
    if (_isDragging == false) 
    { 
     _isDragging = true; 
    } 
} 

void Point_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    _isDragging = false; 
    ((UIElement)sender).ReleaseMouseCapture(); 
} 

void Point_MouseMove(object sender, MouseEventArgs e) 
{ 
    //where the point gets moved and some other logic 
    //possibly this logic takes too long? 
} 

Antwort

0

Ich habe eine Lösung gefunden, die funktioniert. Ich habe immer noch keine Ahnung, warum es immer die MouseCapture verliert.

pinPoint.LostMouseCapture += Point_LostMouseCapture; 

. 
. 
. 

void Point_LostMouseCapture(object sender, MouseEventArgs e) 
{ 
    //if we lost the capture but we are still dragging then just recapture it 
    if (_isDragging) 
    { 
     ((UIElement)sender).CaptureMouse(); 
    } 
} 
Verwandte Themen