как избежать щелчка, когда я хочу двойной клик?

У меня есть приложение в WPF и одна кнопка. В этом случае я хочу, чтобы событие click, реализующее код, но я хочу, чтобы при двойном щелчке мышью выполнялся другой код, но не код события click.

Проблема в том, что код события click всегда выполняется, и я не знаю, есть ли способ избежать выполнения события click, когда я нажимаю doulbe.

Я следую шаблону MVVM, и я использую свет MVVM для преобразования события в команду.

Благодарю.

Установите для параметра RoutedEvent e.Handled значение True после обработки события MouseDoubleClick, чтобы заблокировать события второго щелчка при запуске.

Если вы хотите заблокировать поведение события первого клика, вы можете использовать таймер:

 private static DispatcherTimer myClickWaitTimer = new DispatcherTimer( new TimeSpan(0, 0, 0, 1), DispatcherPriority.Background, mouseWaitTimer_Tick, Dispatcher.CurrentDispatcher); private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e) { // Stop the timer from ticking. myClickWaitTimer.Stop(); Trace.WriteLine("Double Click"); e.Handled = true; } private void Button_Click(object sender, RoutedEventArgs e) { myClickWaitTimer.Start(); } private static void mouseWaitTimer_Tick(object sender, EventArgs e) { myClickWaitTimer.Stop(); // Handle Single Click Actions Trace.WriteLine("Single Click"); } 

В событии клика вы можете проверить количество кликов в EventArgs, например;

 private void RightClickDown(object sender, MouseButtonEventArgs e) { if (e.ClickCount == 1) { //do single click work here. } if (e.ClickCount == 2) { //do double click work. } } 

Это означает, что вы можете различать однократные и двойные щелчки вручную, если это то, что вы хотите.

Вот хорошее объяснение того, как различать клики и двойные клики. И это дает вам 2 примера о том, как вы можете это достичь.

Я поделился этим решением, это сочетание между двумя другими решениями. Извините, я не могу дать приемлемое решение.

Если я использую PreviewMouseLeftButtonDown для управления, когда работает один клик или двойной щелчок, вместо использования двух событий (щелкните и дважды щелкните).

Поэтому я решаю проблему с этим кодом:

Этот первый метод управляет щелчком мыши.

 private void MouseLeftButtonDownCommand(MouseButtonEventArgs e) { if (e.ClickCount == 1) { _dtMouseClick.Start(); } else if(e.ClickCount > 1) { _dtMouseClick.Stop(); //the code of the double click } } 

Этот метод является методом, который связан с DispatcherTimer, который выполняется, если не остановлен вторым щелчком мыши.

 private void MouseClick_Tick(object sender, System.EventArgs e) { _dtrMouseClick.Stop(); //code of the single click } 

ДиспетчерTimer создается в конструкторе модели представления

 _dtBotonBuscarMouseClick = new System.Windows.Threading.DispatcherTimer( new TimeSpan(0, 0, 0, 0, 250), System.Windows.Threading.DispatcherPriority.Background, MouseClick_Tick, System.Windows.Threading.Dispatcher.CurrentDispatcher); _dtMouseClick.Stop(); 

Интервал составляет 250 мс, это интервал времени, в течение которого пользователю необходимо дважды щелкнуть.

В этом решении я использую тот же способ, чтобы остановить метод dispatcherTimer, stop (), но по какой-то причине, если я использую два события (click и mouseDoubleClick), диспетчерTimer не останавливается при двойном щелчке, и если я использую MouseLeftButtonDown событие, решение которого работает.