WPF: Bouton simple clic + double clic problème
J'ai à gérer à la fois la simple clic et le double clic sur un bouton dans une application WPF avec réaction différente.
Malheureusement, sur un doubleclick, WPF feux de deux événement de clic et double-cliquez sur l'événement, il est donc difficile de gérer cette situation.
Il a essayé de le résoudre à l'aide d'une minuterie, mais sans succès...j'espère que vous pourrez 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 "SEUL CLIC d'ACTION" appelé après le "DOUBLE-CLIC" sur doubleclick. C'est étrange que j'ai mis ledoubleClickTimer
null sur le double clic, mais dans le delayedBtnClick
c'est vrai :O
J'ai déjà essayé d'utiliser plus de temps, un bool drapeau et de la serrure...
Avez-vous des idées?
Meilleur!
source d'informationauteur Hunsoul
Vous devez vous connecter pour publier un commentaire.
Si vous définissez la
RoutedEvent
'se.Handled
àtrue
après la manipulation duMouseDoubleClick
cas, alors il n'ira pas en appel de laClick
Événement la deuxième fois, après leMouseDoubleClick
.Il y a un post récent qui touche à avoir des comportements différents pour
SingleClick
etDoubleClick
qui peut être utile.Toutefois, si vous êtes sûr que vous voulez séparer les comportements et voulez/besoin de bloquer le premier
Click
ainsi que le deuxièmeClick
vous pouvez utiliser leDispatcherTimer
comme si vous étiez.Vous pouvez essayer ceci:
Si nécessaire, vous pourriez avoir besoin de la souris cliquez et attendez jusqu'à ce que la souris pour effectuer les actions.