2013-07-03 165 views
9

我正在開發模擬時鐘選取器控件。 用戶可以單擊分鐘或小時針並拖動以轉動針以選擇特定時間。我想知道如何檢測這種點擊和拖動事件。鼠標單擊並拖動事件WPF

我試過使用MouseLeftButtonDown + MouseMove,但我無法讓它工作,因爲MouseMove總是在鼠標移動發生時觸發,儘管我使用了一個標誌。有沒有更簡單的方法?

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

回答

4

可以使事情變得更容易,不需要處理鼠標下降/上升:

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

我希望用戶點擊並博士而不只是移動鼠標。 –

+0

在wpf拖放中,始終使用PreviewMouseDown。這樣你就可以用MouseMove來實現它。 (MousDown冒泡,不適合拖放) – 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; 
} 

的伎倆

3

我覺得這是最簡單,最直接的方法:

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