Devo gestire sia il singolo clic sia il doppio clic di un pulsante in un'applicazione WPF con una reazione diversa. Sfortunatamente, su un doppio clic, WPF attiva due eventi click e un evento doppio clic, quindi è difficile gestire questa situazione.WPF: clic singolo con pulsante + doppio clic
Ha provato a risolverlo utilizzando un timer ma senza successo ... Spero che tu possa aiutarmi.
Vediamo il codice:
private void delayedBtnClick(object statInfo)
{
if (doubleClickTimer != null)
doubleClickTimer.Dispose();
doubleClickTimer = null;
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new VoidDelegate(delegate()
{
// ... DO THE SINGLE CLICK ACTION
}));
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (doubleClickTimer == null)
doubleClickTimer = new Timer(delayedBtnClick, null, System.Windows.Forms.SystemInformation.DoubleClickTime, Timeout.Infinite);
}
}
}
private void btnNext_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (doubleClickTimer != null)
doubleClickTimer.Change(Timeout.Infinite, Timeout.Infinite); // disable it - I've tried it with and without this line
doubleClickTimer.Dispose();
doubleClickTimer = null;
//.... DO THE DOUBLE CLICK ACTION
}
Il problema è che il 'click ACTION SINGLE' chiamato dopo il 'click DOUBLE ACTION' su DoubleClick. E 'strano che ho impostato il doubleClickTimer
a null il doppio click, ma nel delayedBtnClick
è vero: O
ho già provato a usare il tempo più lungo, una bandiera bool e il blocco ...
Avete qualche idee?
Il migliore!
Grazie mille! e.Handled = true era il trucco! Grazie ancora per la rapida reazione :) – Hunsoul
Se si utilizza quel costruttore per DispatcherTimer, il timer si avvia immediatamente, causando un evento spurio a singolo clic. Anche lo sfondo e la corrente sono valori predefiniti, quindi confondete un po 'le cose (pensavo che ci potesse essere del voodoo lì!). Molto utile però - evviva! –
Non vedo l'utilizzo di DoubleClickTime nel codice. Invece vedo un ritardo hardcoded. È normale? – SandRock