2013-07-03 14 views
9

Pracuję nad sterowaniem próbnika analogowego. Użytkownik może kliknąć wskazówkę minuty lub godziny i przeciągnąć, aby obrócić igłę, aby wybrać konkretny czas. Zastanawiałem się, jak wykryć takie zdarzenie typu "kliknij i przeciągnij".Kliknięcie i przeciągnięcie myszy Event WPF

Próbowałem używać MouseLeftButtonDown + MouseMove, ale nie mogę go uruchomić, ponieważ MouseMove jest zawsze wyzwalany, gdy ruch myszy pojawia się pomimo użycia flagi. Czy istnieje łatwiejszy sposób?

public bool dragAction = false; 

private void minuteHand_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    dragAction = true; 
    minuteHand_MouseMove(this.minuteHand, e); 
} 

private void minuteHand_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (dragAction == true) 
    { 
     //my code: moving the needle 
    } 
} 

private void minuteHand_MouseLeftButtonUp(object sender, MouseEventArgs e) 
{ 
    dragAction = false; 
} 

Odpowiedz

4

można ułatwić i nie muszą obsługiwać myszką w dół/w górę:

private void minuteHand_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (Mouse.LeftButton == MouseButtonState.Pressed) 
    { 
     //my code: moving the needle 
    } 
}  
+0

Chcę, aby użytkownik kliknął i dr ag, a nie tylko poruszanie myszą. –

+0

W wpf drag & Drop używaj zawsze PreviewMouseDown. W ten sposób osiągniesz to, pracując z MouseMove. (MousDown bulgocze i nie nadaje się do przeciągania i upuszczania) – deafjeff

3
public bool dragAction = false; 

private void minuteHand_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    dragAction = true; 
    minuteHand_MouseMove(this.minuteHand, e); 
} 

private void minuteHand_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (dragAction == true) 
    { 
     this.DragMove(); 
    } 
} 

private void minuteHand_MouseLeftButtonUp(object sender, MouseEventArgs e) 
{ 
    dragAction = false; 
} 

załatwia sprawę

3

Myślę, że to najprostszy i najbardziej bezpośredni sposób:

private void Window_MouseMove(object sender, MouseEventArgs e) { 
    if (e.LeftButton == MouseButtonState.Pressed) { 
     this.DragMove(); 
    } 
} 
Powiązane problemy