2013-07-03 16 views
9

Sto sviluppando un controllo di selezione orologio analogico. L'utente può fare clic sulla lancetta dei minuti o delle ore e trascinare per ruotare l'ago per selezionare l'ora specifica. Mi stavo chiedendo come rilevare un evento di clic e trascinamento.Fare clic con il mouse e trascinare Evento WPF

Ho provato a utilizzare MouseLeftButtonDown + MouseMove ma non riesco a farlo funzionare come MouseMove è sempre trigger quando il mousemove si verifica nonostante io utilizzi un flag. C'è un modo più semplice?

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

risposta

4

È possibile rendere le cose più facili e non è necessario gestire mouse verso il basso/alto:

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

Desidero che l'utente faccia clic e dr piuttosto che spostare il mouse. –

+0

Nel drag & drop wpf, usare sempre PreviewMouseDown. In questo modo lo realizzerai lavorando con MouseMove. (MousDown è bubbling e non adatto per drag & drop) – 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; 
} 

fa il trucco

3

Credo che questo sia il modo più semplice e più semplice:

private void Window_MouseMove(object sender, MouseEventArgs e) { 
    if (e.LeftButton == MouseButtonState.Pressed) { 
     this.DragMove(); 
    } 
} 
Problemi correlati