2011-06-22 65 views
8

如何在WPF中按住鼠標左鍵並按住鼠標左鍵時重複執行操作?WPF:鼠標左鍵單擊並按住處理

爲UIElement.PreviewMouseLeftButtonDown事件下面的事件處理程序不把工作做好:

private void BaseButtonRight_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
     { 
      // keep performing action while mouse left button is pressed. 
      // Checking e.ButtonState works only for one click 

     } 

執行甚至沒有進入while循環和鼠標左鍵被釋放時處理程序被調用!

回答

17
+1

這應該是公認的答案。 – GONeale

+0

@GONeale,除非OP沒有使用按鈕... 我有同樣的問題,我沒有點擊一個按鈕,所以這個答案不幫助我。我將使用後臺線程答案。但是,是的,OP應該選擇一個答案或張貼他自己的答案並選擇那個答案。 – CramerTV

+0

男孩,忘記在哪個問題被問,但會接受這個答案。 –

0

運行一個線程,直到MouseLeftButtonUp被觸發。

+0

我需要使用UI進行操作。見下面的評論。 –

1

啓動一個BackroundWorker,當鼠標被釋放時退出。使用鼠標向上事件設置標誌,並定期檢查BackgroundWorker DoWork功能。確保在訪問該標誌周圍使用lock {}。

編輯:您要在UI線程訪問一些情況下,使用Dispatcher.BeginInvoke,例如:

Dispatcher.BeginInvoke(new ThreadStart(delegate 
{ 
    ComboBoxItem selItem = ComboboxConnectString.SelectedItem as ComboBoxItem; 
    if (selItem != null && selItem.Tag is string) 
     ComboboxConnectString.Text = (string)selItem.Tag; 
})); 
+0

需要完成的工作涉及使用UI元素的RenderTransform進行操作。使用BackgroundWorker看起來具有挑戰性。BackgroundWorker.DoWork基本上可以休眠,但是如果我封送到UI線程,我該如何再次調用BackgroundWorker.DoWork? –

+0

當你想回調UI線程來修改RenderTransform時,使用Dispatcher.BeginInvoke(我編輯我的文章以包含一個示例)。然後,修改將在您繼續循環時在UI線程中執行。這是人人用來在更新進度條時執行後臺操作的相同方法。 –

相關問題