Je dois gérer à la fois le simple clic et le double-clic d'un bouton dans une application WPF avec une réaction différente. Malheureusement, lors d'un double clic, WPF déclenche deux événements click et un double clic, il est donc difficile de gérer cette situation.WPF: Bouton simple clic + double clic problème
Il a essayé de le résoudre en utilisant une minuterie, mais sans succès ... J'espère que vous pouvez m'aider.
permet de voir le code:
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
}
Le problème est que le 'ACTION SIMPLE CLIC' appelé après la 'ACTION DU DOUBLE CLIC' sur doubleClick. Il est étrange que je mis le doubleClickTimer
à null double clic, mais dans le delayedBtnClick
il est vrai: O
Je l'ai déjà essayé d'utiliser plus de temps, un drapeau bool et serrure ...
Avez-vous des des idées?
Meilleur!
Merci beaucoup! Le e.Handled = true était l'astuce! Merci encore pour la réaction rapide :) – Hunsoul
Si vous utilisez ce constructeur pour DispatcherTimer, le temporisateur démarre immédiatement, ce qui provoque un seul événement parasite. Aussi Background et Current sont des valeurs par défaut, donc confondez un peu les choses (il y a peut-être du vaudou!). Très utile cependant - applaudissements! –
Je ne vois pas l'utilisation de DoubleClickTime dans le code. Au lieu de cela, je vois un délai codé en dur. Est-ce normal? – SandRock